C语言8大经典排序算法代码和详细注释

来源:互联网 发布:直播声音软件 编辑:程序博客网 时间:2024/05/19 22:44

1.冒泡排序

void bubbleSort(int *a, int an){    for(int i=0;i<an;i++)        for(int j=i+1;j<an;j++)            if(a[i]>a[j]) swap(a,i,j);}

2.插入排序

像扑克摸牌一样,插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中……第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。
以下面5个无序的数据为例:
65 27 59 64 58 (文中仅细化了第四次插入过程)
第1次插入: 27 65 59 64 58
第2次插入: 27 59 65 64 58
第3次插入: 27 59 64 65 58
第4次插入: 27 58 59 64 65

void insertSort(int *a, int an){     int i,j,key;    for(i=0;i<an;i++)    {         key = a[i];         j = i-1;        while(j>=0 && a[j]>key)        {             a[j+1] = a[j];            j--;                    }        a[j+1] = key;    }}

3.归并排序

归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结果序列的前面,这样就保证了稳定性。所以,归并排序也是稳定的排序算法

void mergeSort(int *a, int low, int high){}
0 0
原创粉丝点击