今天最後研究一下二路歸併排序
演算法思想:
利用遞迴,將原始序列不斷兩兩分塊,知道每塊剩下乙個元素,這個元素肯定是有序的。然後利用遞迴的原理合併即可;
二路歸併排序的最好,最壞,和平均時間複雜度為o(nlgn);是一種穩定的排序
演算法實現:
1 #include2using
namespace
std;34
void merge(int data, int low, int mid, int
high)514
15while(i <= mid && j <= high) //
順序選取兩個有序區的較小元素,儲存到t陣列中
1622
23while(i <= mid) //
若比較完之後,第乙個有序區仍有剩餘,則直接複製到t陣列中
24 temp[k++] = data[i++];
25while(j <= high) //
同上26 temp[k++] = data[j++];
27for(i=low, k=0; i <= high; i++, k++) //
將排好序的存回data中low到high這區間
28 data[i] =temp[k];
29delete [ ]temp; //
刪除指標,由於指向的是陣列,必須用delete 30}
3132
33void mergesort(int data, int low, int
high)
34 42}43
44int
main()45;
47 mergesort(x, 0, 7
);48
for(int i = 0; i < 8; i++)
49 cout<"";
50return0;
51 }
排序演算法之二路歸併排序
二路歸併排序是歸併排序中最簡單的一種,其演算法思想是假設有兩個有序的序列,然後將這裡兩個序列合併 為乙個序列,只要找這兩個序列中較小的元素即可,最後把剩下的元素複製出來。void mergearray int a,int first,int mid,int last,int temp int i f...
排序演算法之二路歸併排序
二路歸併排序是採用的分而治之的思想。將乙個待排序的序列分成兩個序列,分別對這兩個序列排序。而對於這兩個序列排序的方式也是還之前一樣,將這兩個序列分別分成兩個序列分別排序。一直這樣分割下去,知道序列中沒有元素或者已有乙個元素為止。因為沒有元素的序列和只有乙個元素的序列定是乙個有序的序列,所以相當於將這...
經典排序之二 快速排序 二路歸併
快速排序,顧名思義效率相比較其他排序方法高,它是一種交換排序 基本思路是 3 對左右兩個陣列做1,2操作,直至陣列裡只有乙個數值 function quicksort arr splice 方法向 從陣列中新增 刪除專案,然後返回被刪除的專案。會改變原陣列 方法對乙個數進行往下取整 小於等於x,且與...