王道考研 ++++ 归并排序

#include <stdio.h>
#include <stdlib.h>
int temp[10001];
void marge(int *list,int L,int mid,int R);
int* margesort(int *list,int L,int R);
/*归并*/
void marge(int *list,int L,int mid,int R)
{
  int i = L,j = mid+1,n = mid,m = R;
  int k = 0;

  while (i <= n && j <= m)
  {
    if(list[i] < list[j])
      temp[k++] = list[i++];
    else
      temp[k++] = list[j++];
  }//当比较晚之后某数组还有剩余元素
  while(i <= n)temp[k++] = list[i++];
  while(j <= m)temp[k++] = list[j++];
  for(i = 0;i < k;i++)
    list[L+i] = temp[i];
}
/*切割*/
int* margesort(int *list,int L,int R)
{
  if(L < R)
  {
    int mid = (L+R) >> 1;
    margesort(list,L,mid);
    margesort(list,mid+1,R);
    marge(list,L,mid,R);
  }
  return list;
}
int main(int argc, char const *argv[])
{
  int *list,size,i;
  printf("请输入数组大小:");
  scanf("%d",&size);
  list = (int*)malloc(sizeof(int)*size);
  printf("请输入%d个元素:\n",size);
  for(i = 0;i < size;i++)
    scanf("%d",&list[i]);
  list = margesort(list,0,size-1);
  printf("排序结果:");
  for(i = 0;i < size;i++)
    printf("%d%c",list[i]," \n"[i == size-1]);
  return 0;
}

发布了85 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/WX_1218639030/article/details/100181309