归并排序

来源:互联网 发布:纳斯卡线条 知乎 编辑:程序博客网 时间:2024/05/17 23:47

简单的归并排序代码,C实现

#include<stdio.h>#include<stdlib.h>//conquervoid merge(int *A, int left ,int mid, int right){   int i;   int j;   int Tl[8];   int Tr[8];   int lnum;   int rnum;   lnum = mid-left+1;   rnum = right - mid;   //assinment    for(i =0;i<lnum;i++)       Tl[i]=A[left+i];   for(j =0;j<rnum;j++)       Tr[j] = A[mid+j+1];   i = 0;   j =0;   //assignment the smaller num to sequence-array;   //and if one temp array(Tr or Tl) is over,   //transport the rest num of another array to sequence-array    while(i<(lnum)&&j<(rnum))   {       if(Tl[i]<Tr[j])           A[left++] = Tl[i++];       else           A[left++] = Tr[j++];   }   while(i<(lnum))   {       A[left++] = Tl[i++];   }   while(j<(rnum))   {       A[left++] = Tr[j++];   }}//dividevoid merge_sort(int *A,int left,int right)    {         int mid;        if(left<right)        {            mid = (left+right)/2;            merge_sort(A,left,mid);            merge_sort(A,mid+1,right);            merge(A,left,mid,right);        }    }int main(){   //test simply   int A[8] = {5,4,3,2,1,0,7,6};   //merge sort   merge_sort(A,0,7);   for(int i=0;i<8;i++)       printf("%d",A[i]);   system("pause");}

归并排序的思想很简单,但是写成代码还是需要小心一点,有很多小细节需要注意,最好的方式是能够记住一种写法,这样可以提高效率。

0 0