演算法(三) 歸併排序 樹概念

2021-09-24 23:56:19 字數 1518 閱讀 9862

//       c語言版

//一趟歸併

static

void

merge

(int

*arr,

int len,

int gap)

else

}//乙個段資料歸併完成,另乙個還有資料

while

(low1 <= high1)

while

(low2 <= high2)

low1 = high2+1;

high1 = low1+gap-1;

low2 = high1+1;

high2 = low2+gap-

11? low2+gap-

1: len-1;

}//不足兩個歸併段

while

(low1 < len)

for(i=

0;i)free

(brr);}

void

mergesort

(int

*arr,

int len)

//o(nlogn),o(n),穩定

}int

main()

;//selectsort(arr,sizeof(arr)/sizeof(arr[0]));

//heapsort(arr,sizeof(arr)/sizeof(arr[0]));

mergesort

(arr,

sizeof

(arr)

/sizeof

(arr[0]

));show

(arr,

sizeof

(arr)

/sizeof

(arr[0]

));return0;

}

templatevoid printarray(type *ar,int n)   //列印陣列

}templatevoid merge(type *di,type *si,int left, int m,int right)

while(i <= m)

while(j <= right) }

templatevoid passmerge(type *br,type *ar,int left,int right)

}templatevoid mergesort(type *ar,int n)

//非遞迴 歸併排序

templatevoid nicepassmerge(type *di,type *si,int n,int s)

delete br;

}int main()

; int n = sizeof(ar)/sizeof(ar[0]);

printarray(ar,n);

nicemergesort(ar,n);

printarray(ar,n);

return 0;

}

概念:

二叉樹的性質:

排序演算法三歸併排序

歸併排序 merge sort 是利用歸併的思想實現的排序方法,該演算法採用經典的分治 divide and conquer 策略 分治法將問題分 divide 成一些小的問題然後遞迴求解,而治 conquer 的階段則將分的階段得到的各答案 修補 在一起,即分而治之 遞迴 實現 void merg...

歸併演算法 歸併排序

歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...

排序三(歸併排序)

其實和兩個有序單鏈表的排序有點相似,不斷劃分子區間,然後將每乙個有序的子區間兩兩進行合併 需要借助乙個額外的空間,將合併的區間拷下來 直到最後合成乙個區間,排序就完成了 其實歸併排序也稱外排序 對記憶體可以進行排序,對磁碟也可以進行排序 例如有這麼乙個題 要求排序100萬個數,這些數無法都載入到記憶...