今天覆習算法,盲敲合併排序出現了許多問題,就把該算法徹底理解一遍,敲了幾遍,加深自己印象
#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;
}