一、快速排序
取数组的第一个值作为基准值key,将数组中小于key的值排在key的左边,将数组中大于key的值排在key的右边,然后递归处理以key为分割的两个序列
(1)挖洞法。
a、挖洞法就是将数组Array第一个值作为基准值key保存(索引left和right分别指向序列的头和尾元素),索引right从右至左移动找到第一个小于key值的元素或者left等于right(left==right)时,将 Array[left] 值填入 Array[left] 的位置。
value | 6(key) | 2 | 4 | 9 | 7 | 10 | 3 |
index | 0(left) | 1 | 2 | 3 | 4 | 5 | 6(right) |
value | 3 | 2 | 4 | 9 | 7 | 10 | 3 |
index | 0(left) | 1 | 2 | 3 | 4 | 5 | 6(right) |
b、然后再从left开始,left从左向右移动找到第一个大于key值的元素或者left等于right(left==right),将该元素值赋值给 Array[right];
value | 3 | 2 | 4 | 9 | 7 | 10 | 9 |
index | 0 | 1 | 2 | 3(left) | 4 | 5 | 6(right) |
c、重复循环执行步骤a和b,直至left等于right(left==right)时结束循环,并将key赋值给 Array[left];
value | 3 | 2 | 4 | 9->6 | 7 | 10 | 9 |
index | 0 | 1 | 2 |