排序算法

参考白话经典算法 原文链接:http://blog.csdn.net/MoreWindows/article/category/859207

1.冒泡排序

 1 void bubbleSort(int array[], int length){
 2     //外层控制循环次数 循环次数为=(排序总个数 - 1), 例:2个数只需要1次就可以比较出来
 3     //i 从1开始比较 只需要比较 (length-1)次即可
 4     for(int i=1; i<=length-1; i++){
 5         //j 负责具体的比较,j+1 是这一轮比较的最大下表值,与已循环的次数有关
 6         for(int j=0; j+1 <= length-1-(i-1); j++){
 7             if(array[j] > array[j+1]){    //j+1的下标
 8                 int temp = array[j];
 9                 array[j] = array[j+1];
10                 array[j+1] = temp;
11             }
12         }
13     }
14 }

 2.插入排序

 1 void insertSort(int array[], int length){
 2     int i,j;
 3     //遍历所有的未排序数
 4     for(i=1; i<length; i++){
 5         //遍历所有从小到大的有序的数
 6         for(j=i-1; j>=0; j--){
 7             //从最大开始,遍历所有从小到大的有序数,并与要插入的数字比较
 8             if(array[i] > array[j])
 9                 //如果在有序数中找到了一个比要插入的数字小的
10                 //则表明左边所有的数字都比这个数小,从有序最大开始
11                 break;
12         }
13 
14         //如果要插入的数比最大的数大,则不用插入;否则移动数据
15         if(j != i-1){
16             //下标[0,j]比要插入数小;
17             //下标(j,i)/[j+1,i-1]比要插入数大;
18             int tmp = array[i];
19             int k;
20             for(k=i-1;k+1>j;k--){
21                 array[k+1] = array[k];
22             }
23             array[j+1] = tmp;
24         }
25     }
26 }

  3.快速排序

 1 int adjustArray(int array[], int l, int r){
 2     int i = l,j = r;
 3 
 4     //先将最左边的数取出来,并作为比较对象
 5     int x = array[l];
 6 
 7     while(i < j){
 8         //从右到左比较 找一个比x小的数字
 9         while((i<j) && (array[j] > x))
10             j--;
11         if(i < j){
12             //如果找到 就将这个数放到最左边的位置
13             array[i] = array[j];
14             i++;
15         }
16 
17         //从左到右比较 找到一个比x大的数字
18         while((i<j) && (array[i] < x))
19             i++;
20         if(i < j){
21             //如果找到就将这个数放到刚才比x小的那个数的位置上面
22             array[j] = array[i];
23             j--;
24         }
25     }
26 
27     //将比较的对象放到中间的位置,这样,左边的所有的数就比这个
28     //数小,右边所有的数字就比这个数大
29     //最后返回这个数的位置
30     array[i] = x;
31     return i;
32 }
33 
34 void quickSort(int array[], int l, int r){
35     if(l < r){
36         int i = adjustArray(array,l,r);
37         //递归调用
38         quickSort(array,l,i-1);
39         quickSort(array,i+1,r);
40     }
41 }


原文地址:https://www.cnblogs.com/alin-qu/p/5542664.html