歸併排序及具體介紹

2021-07-04 01:05:50 字數 1048 閱讀 9780

#include#include//複雜度分析

//t(n) = t(n/2) + t(n/2) + o(n) t(n) = o(nlogn)

//歸併作用是將兩個序列合併 l = 左邊起始位置,r = 右邊起始位置 rightend = 右邊終點位置

void merge(int a,int tmpa,int l,int r,int rightend)

while(l <= leftend) //如果左邊的陣列長一點則將後面的直接存入陣列

tmpa[tmp++] = a[l++];

while(r <= rightend)

tmpa[tmp++] = a[r++]; //反之

for(int i = 0; i < numelements;i++,rightend --) //用numelem來控制賦值的次數

a[rightend] = tmpa[rightend];

}//歸併排序 一直遞迴 然後返回進行排序 l = 初始位置 rightend = 結束位置

void msort(int a,int tmpa,int l,int rightend)

}//統一函式藉口減少引數數量

void merge_sort(int a,int n)

int main()

; int b[11] = ; //從當temp陣列

// merge(a,b,0,5,10); //合併的測試

msort(a,b,0,10);

for(int i=0;i<11;i++)

int c[11] = ;

msort(c,b,0,10);

for(int i=0;i<11;i++) /

int d[5] = ;

merge_sort(d,5);

for(int i=0;i<5;i++)

system("pause");

return 0;

}

歸併排序及利用歸併排序求逆序對數

include include include include include using namespace std 用歸併排序順便完成統計逆序對數。因為合併操作是從小到大進行的,當右邊的a q 複製到t中時,左邊還沒來得及複製到t中的那些數就是左邊所有比a q 大的數。此時在累加器中加上左邊的元...

1 歸併排序簡單介紹

1.歸併排序治分三步 1 將兩邊的有序資料根據規則填充到temp陣列,直到兩方的有序序列有一邊處理完畢為止。2 把剩餘資料序列的資料填充到temp。3 將temp中的資料拷貝到arr中 注意並不是每次都拷貝所有 2.治的 實現 1 public static void merge int arr,i...

歸併排序演算法的具體比較過程

不分享無用的東西 題目 3,1,4,1,5,9,6,5通過歸併排序對它進行從大到小的排序 要進行多少次數組元素之間的比較?第一趟 3,1 4,1 5,9 5,6 元素之間共比較了4次 第二趟 4,3,1,1 9,6,5,5 元素之間共比較了6次 為什麼是6次?具體看下面 首先 left 3,1 ri...