快速排序Qsort C語言版

2021-04-20 12:25:59 字數 1060 閱讀 2276

快速排序(quicksort)是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x小,而右側元素都比x大(從小到大排序)。然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。

分治法將原有問題分解成若干個規模更小、但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合成原問題的解。

首先選擇第乙個數為基準,以此將當前無序的數列劃分成左右兩個區間,左區間的數都比基準小,而右區間的數都比基準大。

快速排序

void quicksort(seqlist q, int low, int high)

}為排序整個檔案,只須呼叫quicksort( q, 1, n )即可完成對整個陣列的排序。

那麼如何來確定基準呢,這需要由partition( )函式來完成。

1、設定兩個指標low和high,初值為區間的下界和上界。選取陣列的第乙個數為基準(pivotpos),即pivotpos=array[low], low=0.

2、首先從右向左比較,如果比基準小,則將較小的數交換到基準所在的位子上,否則繼續向左搜尋--high;

3、發生交換後,再從左向右比較,如果比基準大,則將較大的數交換到基準所在的位子上,否則繼續向右搜尋++low.

4、重複第3、第4部,直到low>=high。然後將基準的值賦給array[low]。

int partition(int low, int high) 

//array[low] = tmp;

return low;}

完整**如下:

#include

#define len 8

int array[len] = ;

void outputlist()

printf("/n");

}int partition(int low, int high) 

array[low] = tmp;

return low;

}void qsort(int low,int high)

}void main()

快速排序(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...

快速排序(Quick Sort)C語言版

快速排序演算法是最早由圖靈獎獲得者tony hoare設計出來的,他在形式化方法理論的發明中都有卓越的貢獻,是上世紀最偉大的計算機科學家之一。而這個快速排序演算法只是他眾多貢獻中的乙個小發明而已。更值得一提的是,我們現在學習的這個快速排序演算法,被列為20世紀十大演算法之一。快速排序其實就是我們前面...