64,637
社区成员
发帖
与我相关
我的任务
分享
template <class T>
void Merge(T a[], int left, int center, int right, int n)
{
T *t = new T[n];//存放被排序的元素
int i = left;
int j = center + 1;
int k = 0;
while (i<=center && j<=right)
{
if (a[i] <= a[j])
t[k++] = a[i++];
else
t[k++] = a[j++];
}
if (i == center+1)
{
while (j <= right)
t[k++] = a[j++];
}
else
{
while (i <= center)
t[k++] = a[i++];
}
//把t[]的元素复制回a[]
for (i=left,k=0; i<=right; i++,k++)
a[i] = t[k];
delete []t;
}
template <class T>
void MergeSort(T a[], int n)
{
int beforeLen; //合并前序列的长度
int afterLen = 1;//合并后序列的长度
for (beforeLen=1; afterLen<n; beforeLen=afterLen)
{
int i = 0;//开始合并时第一个序列的起始位置下标,每次都是从0开始
afterLen = 2 * beforeLen; //合并后序列的长度是合并前的两倍
while (i+afterLen < n)
{
Merge(a, i, i+beforeLen-1, i+afterLen-1, afterLen);
i += afterLen;
}
if (i+beforeLen < n)
Merge(a, i, i+beforeLen-1, n-1, n);
}
}
int main()
{
int a[10] = { 1123, 23211,3123,42,15,622,42427,8424,9,10};
MergeSort<int>(a, 10);
}
#include "stdafx.h"
#include "stdlib.h"
#include<stdio.h>
#include "iostream.h"
void merge(int* arr, int p, int q, int r)
{
int s=q-p+1;
int t=r-q;
int* Larr=new int [s];
int* Rarr=new int [t];
for(int i=0;i!=s;i++)
Larr[i]=arr[p+i];
for( i=0;i!=t;i++)
Rarr[i]=arr[q+i+1];
int j=0;
i=0;
for(int k=p;k!=r;k++)
{
if(Rarr[j] >=Larr[i])
{
arr[k]=Larr[i];
i++;
}
else
{
arr[k]=Rarr[j];
j++;
}
}
delete []Rarr;
delete []Larr;
}
void merge_sort(int* arr,int lhs, int rhs)
{
if(lhs <rhs)
{
int q=(lhs+rhs)/2;
merge_sort(arr,lhs,q);
merge_sort(arr,q+1,rhs);
merge(arr,lhs,q,rhs);
}
}
int main()
{
int a[8]={2,4,5,7,1,3,6,8};
merge_sort(a,0,7);
int i=0;
while(i <8)
{
cout<< a[i]<< " ";
i++;
}
system("PAUSE");
return 0;
}