merge sort 的代碼

以下是merge sort 的代碼 ,最壞情況下比插入排序要好 ,適合大規模排序:
 
 
// mergesort.cpp : 定義控制檯應用程序的入口點。
//
#include "stdafx.h"
#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;

 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;
}

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);
  
 }
}

本文出自 “無聊之地” 博客,請務必保留此出處http://quxiao.blog.51cto.com/933548/272600

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章