快速排序(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世紀十大演算法之一。快速排序其實就是我們前面...