归并排序
归并排序大致上可以理解为把所有数拆分到最小单位,在每个小单位时进行排序,依次把这个小单位变大,然后再排序。一直到所有数。 上图中SR为函数形参时传入的数组,TR为临时数组。在本代码中,num数组为传入数组,t为临时数组。left在最左边,mid为上图的m,right在最右边。 1 #include<stdio.h> 2 3 void Merge(int num[],int t[],int left,int mid,int right){ 4 5 int i = left; //i在左边 6 int j = mid + 1; //j在右边,对应上图 7 int k = i; 8 9 for(;i<=mid && j<=right;k++){ //i、j都是有界限的,k是临时数组存入的下标 10 11 if(num[i]<num[j]){ //找出较小的数依次存放到临时数组t中 12 t[k] = num[i]; //num[i]小就把这个数存入 13 i++; //然后在左边找下一个 14 } 15 else{ 16 t[k] = num[j]; //num[j]小就把这个数存入 17 j++; //然后在右边找下一个 18 } 19 } 20 21 int l; 22 if(i<=mid) //当j全部存入后就把剩余的i部分也全存入 23 for(l=0;l<=mid-i;l++)