信心比金钱更重要!

目标明确==>>>计划跟踪==>>>行动执行!
posts - 41, comments - 3, trackbacks - 0, articles - 2
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

快速排序学习笔记

Posted on 2008-01-26 21:12 luofeng 阅读(103) 评论(0)  编辑 收藏 引用 所属分类: Data Structure
  •  分解算法:每趟运算确保比枢轴pivot小的值都在其左边,大的都在右边。

int Partition(SqList &L, int low, int high)
 {
  L.r[0] = L.r[low];//子表中的第一个记录作为枢轴记录
  int pivot = L.r[low].key;//枢轴记录的关键字值
  while (low < high)
  {
   while (low < high && L.r[high].key>pivot)
   {
    high--;
   }
   L.r[low].key = L.r[high].key;
   while (low < high && L.r[low].key<pivot)
   {
    low++;
   }
   L.r[high].key = L.r[low].key;
  }
  L.r[low] = L.r[0];
  return low;
 }

  • 求解过程:递归调用分解函数的过程。 

void QSort(SqList &L,int low,int high)
 { // 对顺序表L中的子序列L.r[low..high]作快速排序。算法10.7
   int pivotloc;
   if(low<high)
   { // 长度大于1
     pivotloc=Partition(L,low,high); // 将L.r[low..high]一分为二
     QSort(L,low,pivotloc-1); // 对低子表递归排序,pivotloc是枢轴位置
     QSort(L,pivotloc+1,high); // 对高子表递归排序
   }
 }


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理