快速排序
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
时间复杂度:O(N*logN);
代码:
1 void quick_sort(int s[], int l, int r) 2 3 { 4 5 if (l < r) 6 7 { 8 9 int i = l, j = r, x = s[l]; 10 11 while (i < j) 12 13 { 14 15 while(i < j && s[j] >= x) // 从右向左找第一个小于x的数 16 17 j--; 18 19 if(i < j) 20 21 s[i++] = s[j]; // 进行替换 22 23 24 25 while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数 26 27 i++; 28 29 if(i < j) 30 31 s[j--] = s[i]; 32 33 } 34 35 s[i] = x; // 剩余的位置即为x 36 37 quick_sort(s, l, i - 1); // 递归调用 38 39 quick_sort(s, i + 1, r); 40 41 } 42 43 }

浙公网安备 33010602011771号