排序第一章:探究冒泡排序

排序算法来说,这次的博客总共写了七个排序,按照排序的简单性来看分为两类:

1.简单算法: 冒泡排序, 简单选择排序, 直接插入排序

2.改进算法: 希尔排序, 堆排序, 归并排序, 快速排序

从平均情况来看,最后三种改进算法要胜过希尔排序, 并且远远胜过前面三种简单算法。

 

而根据排序排序过程中借助的主要操作, 我们将排序分为四类:

插入排序类: 直接插入排序, 希尔排序

选择排序类: 简单选择排序, 堆排序

交换排序类: 冒泡排序, 快速排序

归并排序类: 归并排序

每一类的后面一个都可以说是前一种的升级版本,但并不是说后面的可以完全代替前面那种。

当排序的个数N越小时候, 采用简单算法好一点,也就是前面的那种好。

(直接插入排序是简单排序里性能最好的)!!(这点比对一下代码,程序运行的复杂度,就可以知晓了)

当排序个数越大时候, 采用改进算法越合适,也就是后面那种性能好。

希望读者把握好,不能盲目相信某一种算法最牛逼。

至于这个算法的总结,等我这段时间空下来,我就会着手写,最迟到2018.4.30号

 

 

#define MAX_SIZE 10

 

typedef struct
{
int m[MAX_SIZE ];
int length;

 

} SqList;

//用排序,铁定跑不了这个swap函数,最好自己写一个

void swap(SqList *q, int i, int j);

void swap(SqList *q, int i, int j)
{
int temp = q->m[i];
q->m[i] = q->m[j];
q->m[j] = temp;

}

//冒泡排序1  也是最经典的
void BubbleSort(SqList *q)
{
for (int i = 1; i < q->length; i++)
{
for (int j = q->length - 1; j >= i; j--)
{
if (q->m[j] > q->m[j + 1])
{
swap(q, j, j + 1);
}
}
}

}

//这个是经典的优化过后的,plus版本

//多了一个标志位,可以提前结束循环

void BubbleSort2(SqList *q)
{
bool flag = true;
for (int i = 1; i < q->length && flag; i++)
{
flag = false;
for (int j = q->length - 1; j >= i; j--)
{
if (q->m[j] > q->m[j + 1])
{
flag = true;
swap(q, j, j + 1);
}
}
}
}

 

下面附另外几种算法网址:

第二种:简单选择排序:

https://blog.csdn.net/patrick_star_cowboy/article/details/79708004

第三种:直接插入排序:

https://blog.csdn.net/patrick_star_cowboy/article/details/79708059

第四种:希尔排序

https://blog.csdn.net/patrick_star_cowboy/article/details/79709013

第五种:堆排序

https://blog.csdn.net/patrick_star_cowboy/article/details/79711555

第六种:归并排序(递归调用)

https://blog.csdn.net/patrick_star_cowboy/article/details/79713078

归并排序第二种(迭代调用)

https://blog.csdn.net/patrick_star_cowboy/article/details/79715480

第七种:快速排序标准版

https://blog.csdn.net/patrick_star_cowboy/article/details/79714413

 

附:生命不息,代码不止! 为了更美好的明天而战!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值