首页 > 试题广场 >

一组记录的关键值为(46,79,56,38,40,84),则

[填空题]
一组记录的关键值为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录的关键值46为基准得到的一次划分结果为1.
快速排序:

[46,79,56,38,40,84 ] ,base:46
  |                                      |
left                              right

1.第一步:从right位置往左找到第一个比46小的数,
  如果找到,将此数赋给left位置
  left和right指针分别为前后的40。

   [40,79,56,38,40,84]
      |                             |
    left                        right
    

2.第二步:从数组的left位置向后找,找到第一个比46大的数,
  如果找到,将此数赋给right的位置

   [40, 79, 56, 38, 79, 84]
            |                |
         left             right

3.重复第一步:从right位置往左找到第一个比46小的数,
  如果找到,将此数赋给left位置

   [40, 38, 56, 38, 79, 84]
           |            |
         left       right

4.重复第二步:从left位置往右找到第一个比46大的数,
  如果找到,将此数赋给right位置

   [40, 38, 56, 56, 79, 84]
                 |      |
              left   right

5.重复第一步:从right位置往左找到第一个比46小的数,
  没有找到,left和right位置重合
   [40, 38, 56, 56, 79, 84]
                 |    
          left&&right

 将base值插入,完成一次排序
   [40, 38, 46, 56, 79, 84]
发表于 2018-01-09 13:24:16 回复(0)
这里说的以46为基准是指以46为轴,小于46的排在46左边,大于46的排在右边。46 79 56 38 40 84 
第一次:从最右边往左边扫描,找到第一个比46小的数,将其交换得到 40 79 56 38 46 84 
第二次:从最左边往右扫描,找到第一个比46大的数,将其交换得到 40 46 56 38 79 84
第三次:从最右边往左边扫描,找到第一个比46小的数,将其交换得到 40 38 56 46 79 84
第四次:从最左边往右扫描,找到第一个比46大的数,将其交换得到 40 38 46 56 79 84
到这里发现比46小的数都在46左边,比46大的都在右边也就是一次划分。
发表于 2018-04-07 15:25:20 回复(0)
快速排序第一步是从后往前,元素移动方向与对应指针移动方向相同,即,假设i从1向后,j从n-1向前,i指针找到元素后,将该元素后移至j位置,j同理前移。
发表于 2018-02-02 15:28:11 回复(0)