c/c++常用算法-- 基本排序算法(二)

2014-02-08 13:36:04 · 作者: · 浏览: 163

 

  //合并排序

  void MergeSort(int a[],int n)

  {

  int *p;

  int h,count,len,f;

  count = 0; //排序步骤

  len =1; //有序序列的升序

  f = 0; //变量f作标志

  if (!(p=(int *)malloc(sizeof(int)*n))) //分配内存空间

  {

  printf("内存分配失败!\n");

  exit(0);

  }

  while (len < n)

  {

  if (f == 1) //交替在a和p之间合并

  {

  MergeOne(p, a, n, len); //p合并到a

  }

  else

  {

  MergeOne(a, p, n, len); //a合并到p

  }

  len = len *2;

  f = 1-f;

  count++;

  printf("第%d步排序结果:",count);

  for (h = 0; h < SIZE; h++)

  {

  printf(" %d",a[h]);

  }

  printf("\n");

  }

  if (f)

  {

  for (h = 0; h < n; h++)

  {

  a[h] = p[h];

  }

  }

  free(p);

  }

  int main(int argc, const char * argv[])

  {

  int shuzu[SIZE],i;

  srand(time(NULL));

  for (i=0; i

  {

  shuzu[i] = rand() % 100;

  }

  printf("排序前的数组为:\n");

  for (i=0; i

  {

  printf(" %d",shuzu[i]);

  }

  printf("\n");

  MergeSort(shuzu,SIZE);

  printf("排序后的数组为:\n");

  for (i=0; i

  {

  printf(" %d",shuzu[i]);

  }

  printf("\n");

  // std::cout << "Hello, World!\n";

  return 0;

  }

  运行结果: