1. 程式人生 > >排序(3)-----快速排序詳細分析

排序(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); } }