归并排序分析

来源:互联网 发布:jdbc mysql陶伟基 编辑:程序博客网 时间:2024/06/05 22:46
     
#include <iostream>using namespace std;void Merge(int *data,int start,int between,int end){    int length1=between-start+2;   int  length2=end-between+1;      int Left[length1];      int Right[length2];      for(int i=0;i<length1-1;i++)            Left[i]=data[start+i];            Left[length1-1]=100000;      for(int i=0;i<length2-1;i++)          Right[i]=data[between+i+1];          Right[length2-1]=100000;          int i=0,j=0;      for(int index=start;index<=end;++index)            {               if (Left[i]<=Right[j])                 {                    data[index]=Left[i++];                 }         else  { data[index]=Right[j++]; }                }    }void MergeSort(int *data,int start,int end){if(start<end)      {      int between=(end+start)/2;      MergeSort(data, start, between);//下标为start和 between之间的排序完毕       MergeSort(data, between+1,end);//下标为between+1和end之间的数组排序完毕       Merge(data,start,between,end);      //把排好序的两个数组合并       }   }int main(){int A[10]={1,44,32,1,21,23,32,433,2,0};MergeSort(A,0,9);for(int i=0;i<10;++i)      cout<<A[i]<<" ";       return 0;} 
归并排序 时间复杂度O(Nlog(N))
0 0