65,211
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
using std::cout;
using std::endl;
const int ARRAY_SIZE = 100;
void merge(int A[], int const first, int const mid, int const last);
void merge_sort(int a[],int first,int last);
void merge(int A[], int const first, int const mid, int const last)
{
int left[ARRAY_SIZE/2+1],right[ARRAY_SIZE/2+1];
int left_size = mid - first;
int right_size = last - mid + 1;
int l,r,n;
for(l=0;l <left_size;l++)
left[l] = A[first+l];
for(r=0;r <right_size;r++)
right[r] = A[mid+r];
l=r=0;
n=first-1;
while ((l <left_size)&&(r <right_size))
{
n++;
if (left[l] <right[r])
A[n] = left[l++];
else
A[n] = right[r++];
}
//if(l!=left_size-1)
//{
while(l <=left_size-1) A[++n] = left[l++];
//}
//if (r!=right_size-1)
//{
while(r <=right_size-1)A[++n] = right[r++];
//}
}
void merge_sort(int a[],int first,int last)
{
int mid;
if (first <last)
{
mid=(first+last)/2+1;
merge_sort(a,first,mid-1);
merge_sort(a,mid,last);
merge(a,first,mid,last);
}
}
void main()
{
int a[ARRAY_SIZE]={846,4,78,46,12,547,54,47,33,51};
merge_sort(a,0,9);
for (int i=0;i <10;i++)
{
cout << a[i] <<endl;
}
}
#include <iostream>
using std::cout;
using std::endl;
const int ARRAY_SIZE = 100;
void merge(int A[], int const first, int const mid, int const last);
void merge_sort(int a[],int first,int last);
void merge(int A[], int const first, int const mid, int const last)
{
int left[ARRAY_SIZE/2+1],right[ARRAY_SIZE/2+1];
int left_size = mid - first;
int right_size = last - mid + 1;
int l,r,n;
for(l=0;l <left_size;l++)
left[l] = A[first+l];
for(r=0;r <right_size;r++)
right[r] = A[mid+r];
l=r=0;
n=first-1;
while ((l <left_size)&&(r <right_size))
{
n++;
if (left[l] <right[r])
A[n] = left[l++];
else
A[n] = right[r++];
}
//if(l!=left_size-1)
//{
while(l <=left_size-1) A[++n] = left[l++];
//}
//if (r!=right_size-1)
//{
while(r <=right_size-1)A[++n] = right[r++];
//}
}
void merge_sort(int a[],int first,int last)
{
int mid;
if (first <last)
{
mid=(first+last)/2+1;
merge_sort(a,first,mid-1);
merge_sort(a,mid,last);
merge(a,first,mid,last);
}
}
void main()
{
int a[ARRAY_SIZE]={846,4,78,46,12,547,54,47,33,51};
merge_sort(a,0,9);
for (int i=0;i <10;i++)
{
cout << a[i] <<endl;
}
}
#include <iostream>
using std::cout;
using std::endl;
const int ARRAY_SIZE = 100;
void merge(int A[], int const first, int const mid, int const last);
void merge_sort(int a[],int first,int last);
void merge(int A[], int const first, int const mid, int const last)
{
int* a=new int[last-first+1];
int l=first,r=mid+1,n=0;
int i;
while(l<=mid&&r<=last)
if(A[l]<=A[r]) a[n++]=A[l++];
else a[n++]=A[r++];
while(l <=mid)
a[n++] = A[l++];
while(r <=last)
a[n++] = A[r++];
for(i=0,n=first;n<=last;)
A[n++]=a[i++];
delete []a;
}
void merge_sort(int a[],int first,int last)
{
int mid;
if (first <last)
{
mid=(first+last)/2;
merge_sort(a,first,mid);
merge_sort(a,mid+1,last);
merge(a,first,mid,last);
}
}
void main()
{
int a[ARRAY_SIZE]={846,4,78,46,12,547,54,47,33,51};
merge_sort(a,0,9);
for (int i=0;i <10;i++)
{
cout <<a[i] <<endl;
}
}