对38,49,20,50,17,60,88进行快速排序求以第一个记录的关键字为基准的一次划分结果
时间: 2024-04-29 16:20:12 浏览: 7
以第一个记录的关键字38为基准,进行一次快速排序的划分过程如下:
1. 选定38作为基准,将49, 20, 50, 17, 60, 88中的第一个49作为游标;
2. 从基准38的右侧开始,查找第一个比38小的数,找到20后停止查找;
3. 将20放到游标的位置,即将49与20交换;
4. 由于游标现在在20的位置,因此将游标更新为20;
5. 从基准38的左侧开始,查找第一个比38大的数,找到50后停止查找;
6. 将50放到游标的位置,即将20与50交换;
7. 由于游标现在在50的位置,因此将游标更新为50;
8. 继续从基准38的左侧开始查找,发现17比38小,将17与游标所在位置的50交换;
9. 由于游标现在在17的位置,因此将游标更新为17;
10. 继续从基准38的左侧开始查找,发现60比38大,停止查找;
11. 由于游标现在在17的位置,因此将游标所在位置的17与基准38交换;
12. 划分结束,得到新的序列:20, 17, 38, 50, 49, 60, 88。
因此,以第一个记录的关键字为基准的一次划分结果为:20, 17, 38, 50, 49, 60, 88。
相关问题
若一组记录的关键字为46,79,56,38,40,84,利用快速排序的方法,以第一个记录为基准得到的第一次划分结果为
初始状态下,以第一个记录 46 为基准,左右指针分别指向数列的首尾:
```
46, 79, 56, 38, 40, 84
^ ^
left right
```
首先右指针从右向左扫描,寻找第一个小于基准数的数,找到数值为 84 的记录,右指针停止移动。接着左指针从左向右扫描,寻找第一个大于基准数的数,找到数值为 56 的记录,左指针停止移动。此时交换左右指针所指的记录:
```
46, 56, 79, 38, 40, 84
^ ^
left right
```
右指针继续向左移动,寻找下一个小于基准数的数,找到数值为 40 的记录,右指针停止移动。左指针继续向右移动,寻找下一个大于基准数的数,此时左指针已经扫描到了右指针的位置,扫描结束。
最后交换基准数和左指针所指的记录:
```
40, 56, 79, 38, 46, 84
^
left
```
第一次划分的结果为基准数 46 左侧的数均比 46 小,右侧的数均比 46 大:
```
40, 56, 38, 46, 79, 84
|
基准数 46
```
若一组记录的关键字为146,79,56,38,40,84),利用快速排序的方法,以第一个记录为基准得到的第一次划分结果为
初始状态下,以第一个记录 146 为基准,左右指针分别指向数列的首尾:
```
146, 79, 56, 38, 40, 84
^ ^
left right
```
首先右指针从右向左扫描,寻找第一个小于基准数的数,找到数值为 84 的记录,右指针停止移动。接着左指针从左向右扫描,寻找第一个大于基准数的数,找到数值为 79 的记录,左指针停止移动。此时交换左右指针所指的记录:
```
146, 79, 56, 38, 40, 84
^ ^
left right
```
接着右指针继续向左移动,寻找下一个小于基准数的数,找到数值为 40 的记录,右指针停止移动。左指针继续向右移动,寻找下一个大于基准数的数,找到数值为 56 的记录,左指针停止移动。再次交换左右指针所指的记录:
```
146, 56, 40, 38, 79, 84
^ ^
left right
```
右指针继续向左移动,寻找下一个小于基准数的数,找到数值为 38 的记录,右指针停止移动。左指针继续向右移动,寻找下一个大于基准数的数,此时左指针已经扫描到了右指针的位置,扫描结束。
最后交换基准数和左指针所指的记录:
```
38, 56, 40, 146, 79, 84
^
left
```
第一次划分的结果为基准数 146 左侧的数均比 146 小,右侧的数均比 146 大:
```
38, 56, 40, 146, 79, 84
|
基准数 146
```