1 /*
2 一趟快速排序的算法是:
3 找一个记录,以它的关键字作为“枢轴”,
4 凡其关键字小于枢轴的记录均移动至该记录之前,
5 反之,凡关键字大于枢轴的记录均移动至该记录之后。
6 A[0] A[1] A[2] A[3] A[4] A[5] A[6]:
7 49 38 65 97 76 13 27
8 进行第一次交换后:
9 27 38 65 97 76 13 49
10 进行第二次交换后:
11 27 38 49 97 76 13 65
12 进行第三次交换后:27 38 13 97 76 49 65
13 进行第四次交换后:27 38 13 49 76 97 65
14 */
15 int fqsort(int low,int high,int a[])
16 {
17 int i = low,j = high,k = a[low];//找一个比较的点
18 while(i<j)
19 {
20 while(i<j&&a[j]<=k)//从右向左移直至找到比k大的数
21 j--;
22 a[i] = a[j];//比这个数小的放右边
23 while(i<j&&a[i]>=k)//从左向右移直至找到比k小的数
24 i++;
25 a[j] = a[i];//比这个数小的放左边
26 }
27 a[i] = k;
28 return j;//j左右两边已经被k分割开 再把j+1当作右边一组的low j-1当作左边一组的high进行下一次的快排
29 }
30 void qsort(int low,int high,int a[])
31 {
32 int q;
33 if(low<high)
34 {
35 q = fqsort(low,high,a);//找到分割点
36 qsort(low,q-1,a);//左右两边进行快排
37 qsort(q+1,high,a);
38 }
39 }