快速排序:两头向中间扫描
1.一趟的思路
① 存储基准(一般选第一个)
② while(指示器 i < 指示器 j )[指示器用于扫描到哪里了]
{
①向左扫描直到找到小于基准的(伴随指示器j移动)②用找到的把指示器i所指的覆盖
①向右扫描直到找到大于基准的(伴随指示器j移动)②用找到的把指示器j所指的覆盖
}
③ 归位(基准覆盖 i 或 j 位置)
2. 一趟分析
① 取基准7
② 一趟的排序 [ while(指示器 i < 指示器 j ){} ] 图
③ 归位图
3.一趟代码
int Partion ( Rectype R[ ] , int h, int r)
{
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) ;
}
}