排序算法来说,这次的博客总共写了七个排序,按照排序的简单性来看分为两类:
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
附:生命不息,代码不止! 为了更美好的明天而战!