代码运行:
只讲一趟排序,将第一个 key 值放入正确的位置
对 挖坑函数调用,给他传首元素以及尾元素的地址
left = 0 ,right = 13
判断,left > = right ?,表达式为假,跳过
pivot(坑的坐标) = 0; key = 8 ; head = 0 ;end = 13;
进入外层循环 0(head) < 13(end),表达式为真
0 (head)< 13(end) && 9(a[end]) >= 8(key)?表达为真,end- -;
再次判断 0(head) < 12(end) && 7(a[end]) >= 8(key)?表达为假,循环结束;
将 7 挪到 8的位置,然后pivot(坑)的坐标为 12
0(head) < 12(end) && 7(a[head]) <= 8(key)?表达式为真,head++;
再次判断 1(head) < 12(end) && 3(a[head]) <= 8(key) ,表达式为真 ,head++;
再次判断 2(head) < 12(end) && 7(a[head]) <= 8(key) ?表达式为真, head++
再次判断 3(head) < 12(end) && 4(a[head]) <= 8(key); 表达式为真head++
再次判断 4(head) < 12(end) && 9(a[head]) <= 8(key);?表达式为假 ,挪动 ,pivot = head;
head 判断结束,看一下 head与end 的关系,4 < 12表达式为真,进入
4(head) < 12(end) && 9(a[end]) > 8(key) ?表达式为真 ,end--;
再次判断, 4(head) < 11(end) && 5(a[end]) > 8(key) ? 表达式为假,循环跳出
挪动 a[end ], pivot = end;
判断 4(head) < 11(end) && 5(a[head]) <= 8(key);?表达式为真,head++;
判断 5(head) < 11(end) && 5(a[head]) <= 8(key);?表达式为真,head++;
判断 6(head) < 11(end) && 7(a[head]) <= 8(key);?表达式为真,head++;
判断 7(head) < 11(end) && 2(a[head]) <= 8(key);?表达式为真,head++;
判断 8(head) < 11(end) && 3(a[head]) <= 8(key);?表达式为真,head++;
判断 9(head) < 11(end) && 4(a[head]) <= 8(key);?表达式为真,head++;
判断 10(head) < 11(end) && 9(a[head]) <= 8(key);?表达式为假,执行
判断,10(head) < 11(end)为真进入
判断
10(head) < 11(end) && 9(a[end]) >= 8(key) , 表达式为真,end --;
11(head) < 11(end) && 9(a[end]) >= 8(key) , 表达式为为假,执行
由于 pivto 和 end 在一个位置,不用交换了。
11(head) < 11(end) && 9(a[end]) >= 8(key) , 表达式为为假,执行
由于 pivto 和 head 在一个位置,不用交换了。
最后,表达式为假,外层循环也结束了。
将 关键字放在坑的位置
这样关键字的坐标都是小于等于关键字的值,右边的都是大于等于关键字的。所以如果关键字相同数太多,第一趟结束后,你去观察,如果你不知道哪一个是具体的关键,可能会发现主观上的不对,其实是对的。