#include <iostream>
using namespace std;
void merge(int a[], int low, int mid, int high)
{
int i, j, k;
int *b = new int[high-low+1];
for(k=0, i=low, j=mid+1; i<=mid && j<=high;)
{
if(a[i]<=a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
while(i<=mid)
b[k++] = a[i++];
while(j<=high)
b[k++] = a[j++];
for(i=0; i<=high-low; i++)
a[low+i] = b[i];
delete[] b;
}
void mergeSort(int a[], int low, int high)
{
/*递归
if(low>=high)
return ;
int mid = (low+high)/2;
mergeSort(a, low, mid);
mergeSort(a, mid+1, high);
merge(a, low, mid, high);*/
//非递归
int block, l, h;
int n = high+1;
for(block = 1; block<n; block+=block)
{
for(l=0; l+block<n; l+=2*block)
{
h = l + 2*block -1;
if(h>=n)
h = n-1;
merge(a, l, l+block-1, h);
}
}
}
int main()
{
int a[] ={2,6,3,7,5,1,4};
mergeSort(a, 0, (sizeof(a)/4)-1);
for(int i=0; i<sizeof(a)/4; i++)
cout<<a[i]<<" ";
cout<<endl;
}
归并排序
最新推荐文章于 2023-05-27 22:05:58 发布