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