c语言归并排序

百度百科是这么描述归并排序的: 

归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。

 

  如 设有数列{6,202,100,301,38,8,1}

 

  初始状态: [6] [202] [100] [301] [38] [8] [1] 比较次数

 

  i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3

 

  i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4

 

  i=3 [ 1 6 8 38 100 202 301 ] 4

 

  总计: 11次

不知道我下面这个算不算归并排序

 

  
  
  
  
  1. #include <stdio.h> 
  2. void printArr(int arr[],int length){ 
  3.         int i; 
  4.         for(i=0;i<length;i++){ 
  5.                 printf("%d,",arr[i]); 
  6.         } 
  7.         printf("\n"); 
  8. void merge(int a[],int alength,int b[],int blength,int c[]){//将2个已排好序的数组合并到数组c 
  9.         int i=0,j=0,k=0; 
  10.         while(1){ 
  11.                 if(a[i]<=b[j]){ 
  12.                         c[k] = a[i]; 
  13.                         i++; 
  14.                         k++; 
  15.                         if(i==alength){ 
  16.                                 for(;j<blength;j++,k++){ 
  17.                                         c[k] = b[j]; 
  18.                                 } 
  19.                                 break
  20.                         } 
  21.                 }else
  22.                         c[k] = b[j]; 
  23.                         j++; 
  24.                         k++; 
  25.                         if(j==blength){ 
  26.                                 for(;i<alength;i++,k++){ 
  27.                                         c[k] = a[i]; 
  28.                                 } 
  29.                                 break
  30.                         } 
  31.                 } 
  32.         } 
  33.         printArr(c,k); 
  34.  
  35. void mergeSort(int arr[],int length){//将一个数组分成2个数组,前length-1为第一个,最后一个为第二个,然后合并2个数组 
  36.         if(length > 1){ 
  37.                 int arr1[length-1],arr2[1] = {arr[length-1]}; 
  38.                 int i; 
  39.                 for(i=0;i<length-1;i++){ 
  40.                         arr1[i] = arr[i]; 
  41.                 } 
  42.                 mergeSort(arr1,length-1);//递归的调用自己 
  43.                 merge(arr1,length-1,arr2,1,arr); 
  44.         } 
  45.  
  46. int main(void){ 
  47.         int a[10] = {3,54,16,8,123,8,89,23,87,2}; 
  48.         printArr(a,10); 
  49.         mergeSort(a,10); 
  50.         return 0; 
  51.  

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