快速排序的兩種實現方式

2021-09-23 22:33:37 字數 831 閱讀 3650

從小-->大排序

以首位元素作為基準元素

在起始位置小於結束位置的前提下,先從右到左迴圈陣列元素,如果大於基準元素,則向左移動結束位置的索引,當不滿足迴圈條件的時候,將索引是高位的元素賦予索引為低位的元素(也就是首位元素所在的地方)

然後從左到右迴圈陣列元素,如果小於基準元素,則向右移動開始位置的索引,當不滿足迴圈條件的時候,也就是大於基準元素的時候,將索引為低位的元素賦予索引是高位的元素(比基準元素大的元素要放在基準元素的右邊)

當低位元素的索引=高位元素的索引的時候將基準值賦予這個索引位置,

至此,這個索引位置左邊的元素均小於他,右邊的元素均大於他,

然後通過遞迴,將這個元素左右兩邊的元素重複這個過程,

以首位元素作為基準元素將陣列進行從小到大排序至此完成

從大-->小排序

以結尾元素作為基準元素

在起始位置小於結束位置的前提下,從左到右遍歷除最後乙個陣列元素以外的陣列元素,如果沒有比結尾元素大的元素,則將結尾元素和首位元素互換位置,此時結尾元素的索引位置為0,

如果中途有比他大的元素,則和這個元素互換位置,直至這個元素後面的元素都比他小,

遍歷完所有元素後退出迴圈並返回當前基準元素所在的索引位置

然後通過遞迴重複上述過程:

如果遍歷結束後返回的基準元素的索引發生了變化,則將其作為遞迴的開始元素+1,也就是從該元素的下一位元素到結尾元素開始迴圈;

反之,如果沒有發生變動則將返回的基準元素的索引位置-1作為結尾元素進行下一次遞迴(沒有變動代表他就是最小的了,就-1把他的上一位索引元素也就是比他低一位的索引元素作為下一次遞迴的陣列結束元素)

至此,以結尾元素為基準元素將陣列進行從大到小的排列至此完成。

快速排序的兩種實現

快速排序演算法是現在用的最廣的排序演算法,也是效率最高的。它有兩種實現方式,一種是定軸法,另外一種是挖坑法。這裡簡單介紹一下兩種實現方法的思想,並附上c 實現 一 定軸法 1.備份對軸 首記錄 2.取兩個指標left和right,初始值分別是序列的第二個元素和最後乙個元素,並且left right ...

快速排序的兩種實現方式(遞迴 非遞迴)

ifndef quick sort h define quick sort h include include include 快速排序是不穩定的,其時間平均時間複雜度是o nlgn 逆序序列下效果最差,逼近 o n2 起空間複雜度是 log2n,因為需要空間來儲存遞迴的區間範圍。templatec...

兩種快速排序

快排是一種基於交換的排序,氣泡排序 兩兩相鄰作比較,逆序則交換 也是基於交換的排序,快排運用了二分法的思想,每次找乙個哨兵,比哨兵小的放一邊,大的放一邊,這是完成了一趟快排。冒泡 for int i 0 ia j 1 快排一 void quicksort int left,int right if ...