2 快速排序(QuickSort C 實現

2021-07-04 08:58:56 字數 1149 閱讀 4746

快速排序的雖然比較簡單,但對於比較久沒接觸的朋友來說,還是容易遺忘的,本人覺得這裡有兩個難點:

1、快速排序中心思想

快速排序的思想歸納起來有的三步:①任意選取序列中的乙個元素,用此元素作為「中間元素」,這裡說明一下,這個「中間元素」,排序後不一定剛好在序列的中間。②在序列中取出所有大於「中間元素」的元素,放在「中間元素」的右邊。③在序列中取出所有小於「中間元素」的元素,放在「中間元素」的左邊。經過這三步後便完成了一輪排序。

2、遞迴呼叫

經過一輪排序後,序列一般被「中間元素」分成兩部分,一部分比「中間元素」小,另一部分反之。所以我們要繼續排序剩下的兩部分,所以我們要理解遞迴的思想,只要我們繼續利用以上的三步,排序剩下的兩部分,最終便會排序完整個序列。

剛開始接觸的朋友可能會不太理解我以上說的,這裡貼出c#**,不懂的話直接研究**可能會比較適合碼農:

class program

;quicksort(a, 0, a.length - 1);/*這裡原文第三個引數要減1否則記憶體越界*/

for (int i = 0; i < a.length; i++)

", a[i]);

break;

}console.write(",", a[i]);}}

public static void quicksort(int a, int low, int high)

int first = low, last = high;

//此時a[low]被儲存到key,所以元素a[low]可以當作是乙個空位,用於儲存資料,之後每賦值一次,也會有乙個位置空出來,直到last==first,此時a[last]==a[first]=key

int key = a[low];

while (first < last)

a[first] = a[last];

while (first < last && a[first] <= key)

a[last] = a[first];

}a[first] = key;

//遞迴排序陣列左邊的元素

quicksort(a, low, first - 1);

//遞迴排序右邊的元素

quicksort(a, first + 1, high);

}}

快速排序 quick sort C

快速排序效能好壞主要在於主元的選取。下面 有兩種選主元的方式 1 每次選取當前序列的第乙個元素 2 選取選取當前序列的 首元素 中間元素 尾元素 的 中位數.核心 每次 給主元找到準確的排序位置 效率高的原因也就在於每次找的的都是準確的位置 1 選取首元素為基準 主元 的實現 includeint ...

快速排序(QuickSort) C語言版

include include define maxsize 20 順序表的最大長度 typedef int keytype 定義關鍵字型別為整數型別 typedef struct redtype 記錄型別 typedef struct sqlist 順序表型別 quicksort int part...

快速排序 QuickSort C語言版

快速排序的核心在於分治.分治演算法 1.認定只有乙個元素或沒有元素的陣列是有序的.2.將陣列按照乙個分界值分為左右兩部分.左面所有元素值比分界值小,右面所有元素值比分界值大或等於.3.將左右兩部分分別再分治,直到要分支的部分只有乙個元素或沒有元素,那麼整個陣列就是有序的了.部落格 include i...