演算法之歸併排序

2021-06-29 09:43:52 字數 942 閱讀 8523

/*歸併排序*/

void mergearray(int* a,int* temp,int left,int mid,int right)

else

}while (i1 <= mid)

while (i2 <= right)

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

}

上面**為合併a[left,mid]和a[mid+1,right]的**,因為歸併排序是思想是先比較然後複製到另外乙個臨時陣列,所以這裡的temp起到複製存放的作用。

void mergesort(int* a,int* temp,int left,int right)

}

上面**為歸併排序的**。

int main()

{ //產生length長度的100以內隨機數組成的陣列

srand(time(0));

int length;

cout<<"input the length of array:\n";

cin>>length;

int* shy_array = new int[length];

for(int i=0;i

其實**有乙個疑問,就是當

mergesort(shy_array,temp,0,length-1);改為

mergesort(shy_array,temp,0,length);,然後相應調整

mergesort裡面

mergesort(a,temp,left,mid);為

mergesort(a,temp,left,mid+1);,然後再調整mergearray裡面關於right判斷為小於,這樣會讓程式一直卡在mergesort(a,temp,left,mid+1);這裡。這個地方需要再理解理解。

演算法之歸併排序

歸併排序是分治法 divide and conquer 的經典案例。分治模式在每一層遞迴上都有三個步驟 分解 divide 將原問題分解成一系列子問題 解決 conquer 遞迴地解各子問題。若子問題足夠小,則直接求解 合併 combine 將子問題的結果合併成原問題的解。歸併排序 merge so...

排序演算法之歸併排序

歸併排序也是經典的使用分治法思想的代表演算法之一。歸併排序的效率很高,而且是一種穩定的排序。其總體的思想思路就是將待排序的元素分成大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排序的子集合合併成排好序的總集合 歸併排序c 實現如下 include void mergesort int arr...

排序演算法之歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,歸併排序將兩個已排序的表合併成乙個表。歸併排序基本原理 通過對若干個有序結點序列的歸併來實現排序。所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。歸併排序基本思...