5,3,8,6,4 用5作为比较的基准,最终会把5小的移动到5的左边,比5大的移动到5的右边。
5,3,8,6,4 首先设置i,j两个指针分别指向两端,将左端元素5赋值给temp,j指针先扫描,4比5小停止,执行a[i]=a[j]
4,3,8,6,4 然后j指针再扫描,遇到8比temp大,此时i停在8,j停在4,执行a[j]=a[i]
4,3,8,6,8此时j往前走直到和i相遇,此时的i就是temp应该放的位置
4,3,5,6,8之后对左右子序列递归排序,最终得到有序序列。
1 void quickSort(int* a, int left, int right) 2 { 3 int i = left; 4 int j = right; 5 int temp = a[left]; 6 if (left >= right) 7 return; 8 while (i != j) 9 { 10 while (i < j&&a[j] >= temp) 11 j--; 12 if (j > i) 13 a[i] = a[j]; 14 while (i < j&&a[i] <= temp) 15 i++; 16 if (i < j) 17 a[j] = a[i]; 18 } 19 a[i] = temp;//把基准插入 20 quickSort(a, left, i - 1);/*递归左边*/ 21 quickSort(a, i + 1, right);/*递归右边*/ 22 }
原文:https://www.cnblogs.com/PennyXia/p/12625164.html