C语言关键码序列 66 13 51 76 81 26 57 69 23 谁能给我解释一下答案,见详细,尤其是66怎么跑的
答案:2 悬赏:40 手机版
解决时间 2021-01-16 16:15
- 提问者网友:藍了天白赴美
- 2021-01-15 15:26
C语言关键码序列 66 13 51 76 81 26 57 69 23 谁能给我解释一下答案,见详细,尤其是66怎么跑的
最佳答案
- 五星知识达人网友:逐風
- 2021-01-15 15:47
快排实现的方式有很多种,上面这种实现方式是:
1.起止指针 low high,基准指针index 一开始指向最后一位元素.
2.先左边 low一直往右移,直到找到一个比index大的元素,low index交换.
3.high 左移,直到找到一个比index小的元素, high index 交换.
4.重复 2 3步 直到low = high.
1.起止指针 low high,基准指针index 一开始指向最后一位元素.
2.先左边 low一直往右移,直到找到一个比index大的元素,low index交换.
3.high 左移,直到找到一个比index小的元素, high index 交换.
4.重复 2 3步 直到low = high.
全部回答
- 1楼网友:几近狂妄
- 2021-01-15 16:45
为什么不去百度百科去看一下“快速排序算法”,看完你就明白了追问看完也没明白追答
有三个指针,一个是指向 low,一个指向 high,一个指向基准,low 指针是从首元素开始,high 指针是从末元素开始的,基准指针一定指向 KEY;
循环的目的是: KEY 前面的元素小于KEY,后面的元素大于KEY;
下标从0开始,元素为 num[0]。
具体过程如下:
最开始,序列 66 13 51 76 81 26 57 69 23,low指针指向num[0] = 66,high 指针指向num[8] = 23,KEY = 首元素66;
high 指针移动方向是从后到前,直到找到比 KEY 小的值才停止,交换指向的元素与 KEY 。high 指向num[8] = 23,比 66小,交换元素,序列成为:
23 13 51 76 81 26 57 69 66
low 指针移动方向是从前到后,直到找到比 KEY 大的值才停止。low 指向num[0] = 23,比66小,low 指针继续移动,num[1] = 13,小于66,继续移动,num[2] = 51,小于66,继续移动,num[3] = 76,大于66,停止移动,交换num[4] 与 KEY ,序列成为:
23 13 51 66 81 26 57 69 76
重复过程2,high 指向 num[8],但是你会发现,末元素 与 KEY 刚才在过程3 交换过,所以必定保证了现有序列中末元素的值大于 KEY ,所以可以跳过这个元素,从它的前一位开始(high--),num[7] = 69,大于66, 继续移动,num[6] = 57,小于66,停止移动,交换num[6] 与 KEY,序列成为:
23 13 51 57 81 26 66 69 76
重复过程3,low 指向 num[3],但是你会发现,num[3] 与 KEY 刚才在过程4 交换过,所以必定保证了num[3] 小于 KEY ,所以可以跳过这个元素,从它的后一位开始( low++),num[4] = 81,大于66,停止移动,交换元素,序列成为:
23 13 51 57 66 26 81 69 76
重复过程4,跳过 num[6](high--),num[5] = 26,小于66,停止移动,交换元素,序列成为:
23 13 51 57 26 66 81 69 76
high 和 low 指针指向的下标相同,循环停止。
有三个指针,一个是指向 low,一个指向 high,一个指向基准,low 指针是从首元素开始,high 指针是从末元素开始的,基准指针一定指向 KEY;
循环的目的是: KEY 前面的元素小于KEY,后面的元素大于KEY;
下标从0开始,元素为 num[0]。
具体过程如下:
最开始,序列 66 13 51 76 81 26 57 69 23,low指针指向num[0] = 66,high 指针指向num[8] = 23,KEY = 首元素66;
high 指针移动方向是从后到前,直到找到比 KEY 小的值才停止,交换指向的元素与 KEY 。high 指向num[8] = 23,比 66小,交换元素,序列成为:
23 13 51 76 81 26 57 69 66
low 指针移动方向是从前到后,直到找到比 KEY 大的值才停止。low 指向num[0] = 23,比66小,low 指针继续移动,num[1] = 13,小于66,继续移动,num[2] = 51,小于66,继续移动,num[3] = 76,大于66,停止移动,交换num[4] 与 KEY ,序列成为:
23 13 51 66 81 26 57 69 76
重复过程2,high 指向 num[8],但是你会发现,末元素 与 KEY 刚才在过程3 交换过,所以必定保证了现有序列中末元素的值大于 KEY ,所以可以跳过这个元素,从它的前一位开始(high--),num[7] = 69,大于66, 继续移动,num[6] = 57,小于66,停止移动,交换num[6] 与 KEY,序列成为:
23 13 51 57 81 26 66 69 76
重复过程3,low 指向 num[3],但是你会发现,num[3] 与 KEY 刚才在过程4 交换过,所以必定保证了num[3] 小于 KEY ,所以可以跳过这个元素,从它的后一位开始( low++),num[4] = 81,大于66,停止移动,交换元素,序列成为:
23 13 51 57 66 26 81 69 76
重复过程4,跳过 num[6](high--),num[5] = 26,小于66,停止移动,交换元素,序列成为:
23 13 51 57 26 66 81 69 76
high 和 low 指针指向的下标相同,循环停止。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯