排序
排序算法的稳定性
假设ki = kj(i <= i <= n,1 <=j<=n, i !=j),且在排序前的序列中ri领先于rj(即i<j)。如果排序后仍然领先,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中rj领先ri,则称所用的排序方法是不稳定的。
各种排序算法介绍
本文一共介绍7种排序算法,按照算法的复杂度分为两大类,冒泡排序、简单选择排序和直接插入排序属于简单算法,而希尔排序、堆排序、归并排序、快速排序属于改进算法。
为了讲清楚排序算法的代码,先提供一个用于排序用的顺序表结构。
1
2 3 4 5 6 |
#define MAXSIZE 10//用于要排序数组个数最大值,可根据需要修改
typedef struct { int r[MAXSIZE + 1];//用于存储要排序数组,r[0]用作哨兵或临时变量 int length;//用于记录顺序表的长度 }SqList; |
另外,由于排序常用到的操作是两个数组元素的交换,我们将它写成函数。
1
2 3 4 5 6 7 |
//交换L中数组r的下标为i和j的值
void swap(SqList *L, int i, int j) { |