您现在的位置是:首页 >

交换排序有哪些 排序 - 交换排序 - 快速排序 (二)

火烧 2021-12-19 21:41:47 1032
排序 - 交换排序 - 快速排序 (二)    划分算法Partitio    简单的划分方法  ① 具体做法  第一步 初始化 设置两个指针i和j 它们的初值分别为区间的下界和上界 即i=low i

排序 - 交换排序 - 快速排序 (二)  

   划分算法Partition

  ( ) 简单的划分方法

  ① 具体做法

  第一步 (初始化)设置两个指针i和j 它们的初值分别为区间的下界和上界 即i=low i=high;选取无序区的第一个记录

  R[i](即R[low])作为基准记录 并将它保存在变量pivot中;

  第二步 令j自high起向左扫描 直到找到第 个关键字小于pivot key的记录R[j] 将R[j])移至i所指的位置上 这相当于

  R[j]和基准R[i](即pivot)进行了交换 使关键字小于基准关键字pivot key的记录移到了基准的左边 交换后R[j]中相当于是

  pivot;然后 令i指针自i+ 位置开始向右扫描 直至找到第 个关键字大于pivot key的记录R[i] 将R[i]移到i所指的位置上 这

  相当于交换了R[i]和基准R[j] 使关键字大于基准关键字的记录移到了基准的右边 交换后R[i]中又相当于存放了pivot;接着令指

  针j自位置j 开始向左扫描 如此交替改变扫描方向 从两端各自往中间靠拢 直至i=j时 i便是基准pivot最终的位置 将

  pivot放在此位置上就完成了一次划分

  ②一次划分过程

  一次划分过程中 具体变化情况【 参见动画演示 】

  ③划分算法

  int Partition(SeqList R int i int j)

  {//调用Partition(R low high)时 对R[low high]做划分

  //并返回基准记录的位置

  ReceType pivot=R[i]; //用区间的第 个记录作为基准

  while(i ){>

  while(i =pivot.key) //pivot相当于在位置i上 &&r[j].key>

  j--; //从右向左扫描,查找第1个关键字小于pivot.key的记录R[j]

  if(i )>

  R[i++]=R[j]; //相当于交换R[i]和R[j],交换后i指针加1

  while(i &&r[i].key

  i++; //从左向右扫描,查找第1个关键字大于pivot.key的记录R[i]

  if(i pivot.key )>

  R[j--]=R[i]; //相当于交换R[i]和R[j],交换后j指针减1

  } //endwhile

  R[i]=pivot; //基准记录已被最后定位

  return i;

  } //partition

交换排序有哪些 排序 - 交换排序 - 快速排序 (二)

lishixinzhi/Article/program/sjjg/201311/23788  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码