排序 歸併排序

2021-10-03 21:19:01 字數 1189 閱讀 8790

歸併排序(merging sort)就是利用歸併的思想實現的排序演算法。它的原理是假設初始序列有n個記錄,則可以看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到[n/2]個長度為2或1的有序子串行;再兩兩歸併,...如此重複,直到得到乙個長度為n的有序序列為止,這種排序方法稱為2路歸併排序。

#include#include#includeusing namespace std;

vectortemp;

void merge(vector& nums,int left,int mid,int right)

void mergesort2(vector& nums,int left,int right)

len*=2;

}}int main()

; temp.resize(nums.size(),0);

mergesort(nums,0,nums.size()-1);

for_each(nums.begin(),nums.end(),(int v)sqlist;

//將有序的tr2[s..m]和tr2[m+1..t]合併為有序的tr1[s..t]

void merge(int sr, int tr, int s, int m, int t)

//將剩餘的sr[i..m]複製到tr

if (i <= m)

for (int l = 0; l <= m - i; l++)

tr[k+l] = sr[i+l];

//將剩餘的sr[j..n]複製到tr

if (j <= t)

for (int l = 0; l <= t - i; l++)

tr[k+l] = sr[j+l];

}//將sr[s..t]歸併排序為有序的tr1[s..t]

void msort(int sr, int tr1, int s, int t)

}void mergesort(sqlist* l)

int main()

; l.length = 9;

for (int i = 0; i < l.length; i++)

l.r[i + 1] = r[i];

mergesort(&l);

for (int i = 1; i <= l.length; i++)

return 0;

}

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。2 路歸併演算法 1.演算法基本思路 設兩個有序的子檔...

排序 歸併排序

利用遞迴的思想,當n 1時,只有乙個元素需要排序,為遞迴臨界條件 否則,遞迴的將前半部分資料和後半部分資料各自歸併排序,得到排序後的兩部分資料,然後再將得到的兩部分合併到一起。mergesort algorithm public void mergesort int data mergesort例程...