(C语言)八大排序之:归并排序

归并排序 mergeSort,分治策略。reference: http://www.cnblogs.com/chengxiao/p/6194356.html


  1 #include <stdio.h>
  2 
  3 void mergeSort(int a[], int left, int right);
  4 void display(int a[], int len);
  5 
  6 int main(int argc, char *argv[])
  7 {
  8         int a[] = {2,3,5,1,0,7,5,2};
  9         int len = sizeof(a)/sizeof(a[0]);
 10         mergeSort(a, 0, len-1);
 11 
 12         display(a, len);
 13         return 0;
 14 }
 15 
 16 // 归并
 17 void merge(int a[], int left, int mid, int right)
 18 {
 19         int p = left, q = mid+1;
 20         int temp[right-left+1];
 21         int index = 0;
 22         while(p<=mid || q<=right)
 23         {
 24                 if(p>mid)
 25                         temp[index++] = a[q++];
 26                 else if(q>right)
 27                         temp[index++] = a[p++];
 28                 else if(a[p] >= a[q])
 29                         temp[index++] = a[q++];
 30                 else
 31                         temp[index++] = a[p++];
 32 
 33         }
 34         index = 0;
 35         int i;
 36         for(i=left; i<=right; i++)
 37                 a[i] = temp[index++];
 38 }
 39 
 40 // 递归调用
 41 void mergeSort(int a[], int left, int right)
 42 {
 43         if(left >= right)
 44                 return;
 45         int mid = (left+right)/2;
 46         mergeSort(a, left, mid);
 47         mergeSort(a, mid+1, right);
 48         merge(a, left, mid, right);
 49 }
 50 
 51 void display(int a[], int len)
 52 {
 53         int i;
 54         for(i=0; i<len; i++)
 55                 printf("%d ", a[i]);
 56         printf("\n");
 57 }

猜你喜欢

转载自blog.csdn.net/trb331617/article/details/79440949