C语言排序

时间:2024-12-03 15:29:43

代码运行:

只讲一趟排序,将第一个 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 在一个位置,不用交换了。

最后,表达式为假,外层循环也结束了。

将 关键字放在坑的位置

这样关键字的坐标都是小于等于关键字的值,右边的都是大于等于关键字的。所以如果关键字相同数太多,第一趟结束后,你去观察,如果你不知道哪一个是具体的关键,可能会发现主观上的不对,其实是对的。