排序(3)-----快速排序詳細分析
阿新 • • 發佈:2018-12-20
快速排序:兩頭向中間掃描
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);
}
}