挖坑填数:
1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。
2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。
1 int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置 2 { 3 int i = l, j = r; 4 int x = s[l]; //s[l]即s[i]就是第一个坑 5 while (i < j) 6 { 7 // 从右向左找小于x的数来填s[i] 8 while(i < j && s[j] >= x) 9 j--; 10 if(i < j) 11 { 12 s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑 13 i++; 14 } 15 16 // 从左向右找大于或等于x的数来填s[j] 17 while(i < j && s[i] < x) 18 i++; 19 if(i < j) 20 { 21 s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑 22 j--; 23 } 24 } 25 //退出时,i等于j。将x填到这个坑中。 26 s[i] = x; 27 28 return i; 29 }
1 void quick_sort1(int s[], int l, int r) 2 { 3 if (l < r) 4 { 5 int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[] 6 quick_sort1(s, l, i - 1); // 递归调用 7 quick_sort1(s, i + 1, r); 8 } 9 }