归并排序

来源:互联网 发布:oracle 查询重复数据 编辑:程序博客网 时间:2024/06/05 03:11
#include <stdio.h>    #include <stdlib.h>    #include <time.h> int a[]={0,49,38,65,97,13,27};void printf_array(int *a,int n)  {      int i;      for(i=1;i<=n;i++)       {           printf( "%d   ",a[i]);      }       printf("\n");  }  void merge(int *number,int first,int mid,int last){int aux[13]={0};int i; //第一个数组索引int j; //第二个数组索引int k; //临时数组索引for (i = first, j = mid+1, k = 0; k <= last-first; k++) // 分别将 i, j, k 指向各自数组的首部。{//若 i 到达第一个数组的尾部,将第二个数组余下元素复制到 临时数组中if (i == mid+1) {aux[k] = a[j++];continue;}    //若 j 到达第二个数组的尾部,将第一个数组余下元素复制到 临时数组中if (j == last+1){aux[k] = a[i++];continue;} //如果第一个数组的当前元素 比 第二个数组的当前元素小,将 第一个数组的当前元素复制到 临时数组中if (number[i] < number[j]){ aux[k] = number[i++];}//如果第二个数组的当前元素 比 第一个数组的当前元素小,将 第二个数组的当前元素复制到 临时数组中else{ aux[k] = number[j++];}}//printf_array(aux,last-first+1);for(k=0;k<=last-first;k++)number[first+k]=aux[k];}void merge_sort(int *number,int first,int last){    int mid=0;    if(first<last)    {mid=(first+last)/2;merge_sort(number,first,mid);merge_sort(number,mid+1,last);merge(number,first,mid,last);    }}void main(){printf_array(a,6);merge_sort(a,1,6);printf_array(a,6);}


 

原创粉丝点击