归并排序(mergesort):最坏,平均时间复杂度均为O(nlogn)。

归并排序 :log2N

通过middle 分开两等分  

创建一个空间装进那个空间里面   再赋值回原来的空间

 

#include 

#include 

#include 

void merge_sort(int *arry,int *temp,int left,int middle,int right){

int left_min=left;

int left_max=middle;

int right_min=middle+1;

int right_max=right;

int k=left;

while(left_min<=left_max&&right_min<=right_max){

if(arry[left_min]

           temp[k++]=arry[left_min++];

 

}else{

temp[k++]=arry[right_min++];

 

}

 

 

}

  while(left_min<=left_max){

          temp[k++]=arry[left_min++];

 

}

  while(right_min<=right_max){

        temp[k++]=arry[right_min++];

  

  }

  for(k=left;k<=right;k++){      //赋值给arry这个空间

      arry[k]=temp[k];

  

  }

 

}

void mergesort(int *arry,int *temp,int left,int right){

   if(leftint middle=(left+right)/2;

   mergesort(arry,temp,left,middle);   //递归

   mergesort(arry,temp,middle+1,right);

   merge_sort(arry,temp,left,middle,right);

}

   }

 

void main(){

int add;

int arry[]={1,5,8,4,2,1,4,6};

int temp[8];

int arryLength=sizeof(arry)/sizeof(int);

mergesort(arry,temp,0,arryLength-1);

for(add=0;add

   printf("%d,",arry[add]);

 

}

system("pause");

}

你可能感兴趣的:(排序)