七大排序演算法 快速排序及優化

2021-08-21 17:58:24 字數 1915 閱讀 8806

快速排序(quick sort)也叫做分割槽排序,是目前應用最廣泛的排序演算法。在c++標準庫中的排序程式就被稱作qsort,因為快速排序是其實現中的最基本演算法。是一種不穩定的演算法。

經過上面的**,相信聰明的你們已經明白了快排的奧義 但是 這樣的排序演算法排序演算法有乙個致命的弱點,當序列已經是有序序列時,其遞迴樹成為單枝樹,成為最壞的情況

三者取中法

找到當前序列的最左,中間和最右位置,進行比較,避免最壞的情況。

template

t median3(t * arr, const

int left, const

int right)

if (mid != right && arr[mid] < arr[right])

return arr[right];

}

在前輩們的研究之下發現,當序列元素小於25時,插入排序的效率會更高一些。

所以,我們使用快速排序和插入排序相結合的方式進行排序。

**實現

```c++

#include

using

namespace

std;

#define m 25

// 快速排序+插入排序混合排序演算法

template

void hibridsort(t arr, const

int left, const

int right)

// 快速排序

template

void quicksort(t arr, const

int left, const

int right)

}// 插入排序

template

void insertsort(t * array,const

int left,const

int right)

array[end + 1] = temp;

}}template

t median3(t * arr, const

int left, const

int right)

if (mid != right && arr[mid] < arr[right])

return arr[right];

}template

int partition(t arr, const

int left, const

int right)

else

break;

}if (arr[i] > pivot)

}return i;

}int main()

; //int arr[6] = ;

hibridsort(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1);

for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)

cout

<< arr[i] << " ";

return

0;}

七大排序演算法 選擇排序及優化

在乙個長度為n的無序陣列中,在第一趟遍歷n個資料,找出其中最小的數值與第乙個元素交換,第二趟遍歷剩下的n 1個資料,找出其中最小的數值與第二個元素交換 第n 1趟遍歷剩下的2個資料,找出其中最小的數值與第n 1個元素交換,至此選擇排序完成。時間複雜度o n 2 不穩定的排序 void selects...

C C 七大排序演算法 快速排序

接上面的故事未完待續,除了歸併長老外,還有另外一位快速長老的快速 也是被小小桂子讚不絕口,大呼奇妙 這位快速長老的演算法思想時這樣的 1 每次選取第乙個數為基準 2 然後使用 乾坤大挪移 將大於和小於基準的元素分別放置於基準數兩邊 3 繼續分別對基準數兩側末端未排序的資料使用分治法進行細分處理,直至...

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...