参考白话经典算法 原文链接: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 }

