首先选定一个数为基准数,先对这个数进行归位。即从数列右边、左边分别开始(注意顺序,先右后左),从右向左寻找比基准数小的数,从左向右寻找比基准数大的数(且要保证右边的序数 j 大于左边的序数 i ),分别找到之后,对两数进行交换,如此循环,直到 i 等于 j。循环结束之后,将 i 位置的数与基准数进行交换。最后,运用递归,再对已经归位的基准数左右两边进行排序。具体同上。
例:对数列{6, 1, 2, 7, 9, 3, 4, 5, 10, 8}进行从小到大对排序。
#include <iostream> using namespace std; int a[100] {6, 1, 2, 7, 9, 3, 4, 5, 10, 8}; int main(void) { void func(int, int); func(0, 9); for(int i = 0; i < 10; i++) { cout << a[i] << ' '; } return 0; } void func(int left, int right) { if(left > right) return; int i = left, j = right, temp = a[left], t; while(i != j) { while(j>i && a[j]>=temp) j--; while(i<j && a[i]<=temp) i++; if(i < j) { t = a[i]; a[i] = a[j]; a[j] = t; } } a[left] = a[i]; a[i] = temp; func(left, i-1); func(i+1, right); return; }