十大演算法之歸併排序首先要有分治的思想
歸併排序的過程
1、建立歸併函式入口mergesort(a,n);a是陣列a,n為陣列長度
入口中要有乙個動態分配陣列,長度為n:(int )malloc(nsizeof(int);
2、建立乙個msort函式msort(a,arr,0,n-1)用來做二分0和n-1就是腳標了
3、合併merge(a,arr,left,mid,right)
上**
//歸併排序
#include
using
namespace std;
int a[
101]
;void
merge
(int
*a,int
*arr,
int left,
int mid,
int right)
while
(i<=mid)arr[k++
]=a[i++];
while
(j<=right)arr[k++
]=a[j++];
while
(left<=right)a[left]
=arr[left]
,left++;}
msort
(int
*a,int
*arr,
int left,
int right)
}void
meagesort
(int
*a,int n)
}int
main()
這個就不多解釋了
看不懂的就來聯絡博主吧,計畫在後續就開始直播了,激動不?
聽懂沒?啥?沒有?快來聯絡博主(qq3100310659(備註:c++學習,不然就不給通過哦,博主就是這麼豪橫)
下一章:程式設計師必備十大演算法4-二分查詢
十大排序演算法 歸併排序
歸併排序是一種概念上最簡單的排序演算法,歸併排序是基於分治法的。歸併排序將待排序的元素序列分成兩個長度相等的子串行,為每乙個子串行排序,然後再將他們合併成乙個子串行。合併兩個子串行的過程也就是兩路歸併。1,申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列 2,設定兩個指標,最初位...
大廠程式設計師必備十大基礎演算法 KMP演算法
字串匹配問題 有乙個字串 str1 010101010101010010101010101 和乙個子串 str2 0101010100 現在要判斷 str1 是否含有 str2,如果存在,就返回第一次出現的位置,如果沒有,則返回 1 如果用暴力匹配的思路,並假設現在 str1 匹配到 i 位置,子串...
程式設計師必備十大演算法 最短路徑(1)
最短路徑的演算法大致可以分為三種,不過每一種的演算法都有所不同 在時間複雜度 空間複雜度 負權 有負權的邊 是否可以檢驗有沒有負權或者帶負權的邊 這個演算法比較簡單,暴力解決,時間複雜度為pow n,3 空間複雜度為pow n,2 可以處理負權和帶負權邊的演算法 最短路徑 1 include usi...