排序(3)-----快速排序详细分析

快速排序:两头向中间扫描

1.一趟的思路

①  存储基准(一般选第一个)
②  while(指示器 i < 指示器 j )[指示器用于扫描到哪里了]
     {
	①向左扫描直到找到小于基准的(伴随指示器j移动)②用找到的把指示器i所指的覆盖
	①向右扫描直到找到大于基准的(伴随指示器j移动)②用找到的把指示器j所指的覆盖
     }
③  归位(基准覆盖 i 或 j 位置)

2. 一趟分析

① 取基准7

② 一趟的排序 [ while(指示器 i < 指示器 j ){} ] 图

在这里插入图片描述

③ 归位图

在这里插入图片描述

3.一趟代码

int Partion(Rectype R[], int h, int r)//head rear
{
 int i = h, j = r;
 Rectype Temp = R[h];
 while (i < j)
 {
  while (j > i&&R[j].Key >= Temp.Key) j--; R[i] = R[j];
  while (i < j&&R[i].Key <= Temp.Key) i++; R[j] = R[i];
 }
 R[i] = Temp;
 return i;
}

整个快速排序(递归思路)

void QuickSort(Rectype R[], int h, int r)
{
 int i;
 if (h < r)
 {
  i = Partion(R, h, r);
  QuickSort(R, h, i - 1);
  QuickSort(R, i + 1, r);
 }
}

猜你喜欢

转载自blog.csdn.net/qq_42146775/article/details/85082350
今日推荐