以下是merge sort 的代码 ,最坏情况下比插入排序要好 ,适合大规模排序:
// mergesort.cpp : 定义控制台应用程序的入口点。
//
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void merge(int *,int,int,int);
void mergeSort(int*,int ,int);
#include <iostream>
using namespace std;
void merge(int *,int,int,int);
void mergeSort(int*,int ,int);
int _tmain(int argc, _TCHAR* argv[])
{
{
const int size = 1000;
int A[size];
int n;
cin>>n;
int A[size];
int n;
cin>>n;
for(int i =0;i<n;i++)
{
cin>>A[i];
}
for(int i=0;i<n;i++)
{
cout<<A[i]<<endl;
}
mergeSort(A,0,n-1);
for(int i=0;i<n;i++)
{
cout<<A[i]<<endl;
}
return 0;
}
for(int i=0;i<n;i++)
{
cout<<A[i]<<endl;
}
mergeSort(A,0,n-1);
for(int i=0;i<n;i++)
{
cout<<A[i]<<endl;
}
return 0;
}
void merge(int * A , int p, int q,int r)
{
int n1 = q-p+1;
int n2 = r-q;
const int ll = 100;
const int rr = 100;
int L[ll];
int R[rr];
const int finite = 30000;
for(int i = 0;i<n1;i++)
L[i] = A[p+i];
for(int j = 0;j<n2;j++)
R[j] = A[q+1+j];
L[n1] = finite;
R[n2] = finite;
int i =0;
int j = 0;
for(int k = 0; k <n1+n2 ;k++)
{
if(L[i]>=R[j])
{
A[p+k] = R[j];
j = j+1;
}
else
{
A[p+k] = L[i];
i = i+1;
}
}
}
void mergeSort(int* A,int p,int q)
{
{
if(p<q)
{
cout<<"p"<<p<<endl;
cout<<"q"<<q<<endl;
int r = (p+q)/2;
mergeSort(A,p,r);
mergeSort(A,r+1,q);
cout<<"merge"<<p<<" "<<q<<endl;
merge(A,p,r,q);
}
}
{
cout<<"p"<<p<<endl;
cout<<"q"<<q<<endl;
int r = (p+q)/2;
mergeSort(A,p,r);
mergeSort(A,r+1,q);
cout<<"merge"<<p<<" "<<q<<endl;
merge(A,p,r,q);
}
}
转载于:https://blog.51cto.com/quxiao/272600