算法 合併排序 c++語言

今天覆習算法,盲敲合併排序出現了許多問題,就把該算法徹底理解一遍,敲了幾遍,加深自己印象

#include<iostream>
using namespace std;
void Merge(int a[],int left,int middle,int right)
{
	int m=left,k=left,j=middle+1;
	int *b = new int[right-left];
	while(m<=middle && j<=right){
		if(a[m]<=a[j]) b[k++]=a[m++];
		else b[k++]=a[j++];
	}
	if(m>middle){
		for(int q=j;q<=right;q++) b[k++]=a[q];
	}
	else{
		for(int q=m;q<=middle;q++) b[k++]=a[q];
	}
	for(int w=left;w<=right;w++) a[w]=b[w];
	
}
void MergeSort(int a[],int left,int right)
{
	if(left<right){   //控制至少兩個元素 
		int middle = (left+right)/2;
		MergeSort(a,left,middle);
		MergeSort(a,middle+1,right);
		Merge(a,left,middle,right);
	}

}
int main()
{
	int a[5]={1,4,2,3,7};
	MergeSort(a,0,4);
	for(int j=0;j<=4;j++) cout<<a[j]<<" ";
    return 0;
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章