0
点赞
收藏
分享

微信扫一扫

快速排序的记忆方法


明天就考863了,这次考研就当“一模”了

……


快排就记住两个“截止”的条件

1。循环截止条件:当low指针==high指针

2。算法截止条件:当所有划分都变为单个(一次划分决定一个哨兵的位置)时

划分目的:low指针指过的地方都比哨兵R0小,high指针之国的地方都比R0大


更容易的每次划分记忆过程:(这只是算法执行过程其中的一部分,并没结束)

快速排序的记忆方法_快速排序

以上,“空”的写法是个人为了大家理解加上的,实际过程中其实只是不处理,重复的一个废数而已(碍眼还有碍理解)


其实这么多话,这么多解释只不过是把代码的目的说出来而已,毕竟这才是我们人所能理解的过程嘛~(不理解的记不清楚,我们又不是执行命令的机器,需要知道每步的意图以及“为什么这么做”)

附上代码,以及标出我所说明的部分


#include <iostream>  

 
  using   namespace   std;  

 
  void   Qsort(  int   a[],   int   low,   int   high)【"一次划分过程"】 

 
  { 

 
    if  (low >= high)【直至元素“本尊归位”】 

 
    { 

 
    return  ; 

 
    } 

 
    int   first = low; 

 
    int   last = high; 

 
    int    
 key = a[first];  /*用字表的第一个记录作为枢轴*/  【key就是我说的R0】 

 

    

 
    while  (first < last) 

 
    {  【自右始,H换一次L换一次循环至L=H】
  
    while  (first < last && a[last] >= key)  【若H又(没跳出循环)交换过了L开始往右找不符合】 

 
    { 

 
    --last; 

 
    } 

 

    

 
    a[first] = a[last];  /*将比第一个小的移到低端*/  【这就是“H交换”的代码,其上部分为遍历比较】 

 

    

 
    while  (first < last && a[first] <= key)【L交换过了,H开始往左找不符合】 

 
    { 

 
    ++first; 

 
    } 

 
    

 
    a[last] = a[first];    /*将比第一个大的移到高端*/【这就是“L交换”的代码,其上部分为遍历比较】
 
    } 

 
    a[first] = key;  /*枢轴记录到位*/【L==H,将R0的2赋值到LH的位置】 

 
    Qsort(a, low, first-1);  【例子里的{1},再次划分】 

 
    Qsort(a, first+1, high);  【例子里的{6,5,3}再次划分】 

 
  }

举报

相关推荐

0 条评论