您的位置:首页 > 其它

二路归并排序

2012-07-13 03:16 218 查看
主要思想是先把待排序的数据分成一组一组的, 先是一每个数据为一组,然后2组2组归并, 形成了新的几组, 每组的数据为多个,依次递归下去,最后得到有序的数据线性表

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

{

 int i = 0;

 int r[11] = {1,22,4,33,43,11,123,67,99,2};//测试的10个数据

 Sort(r,0,9); 

 printf("\n");

 for (i = 0; i < 10; i++)//将排序后的数据打印出来

 {

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

 }

 while(1);

 return 0;

}

 

void Sort(int r[],int first, int last)//递归将数据分组和合并

{

 int middle = 0;

 if (first >= last)

  return;

 

  middle =(last + first)  >> 1;

  

  Sort(r, first, middle);//0 4 | 0 2 | 0 1|  

  Sort(r,middle + 1, last);

   OneSort(r,first,middle,last);//合并(对2组数据进行比较 归并)

}

void OneSort(int r[], int first, int middle, int last)对每组数据进行排序

{

 int i = first, j = middle + 1, k = first;

 int r1[10] = {0};//中间数据存储,有待解决

 while (i <= middle && j <= last)

 {

  if (r[i] <= r[j])

   r1[k++] = r[i++];

  else

   r1[k++] = r[j++];//将待合并2组按从小到大的顺序放到中间数据存储中

 }

 if (i <= middle)

 {

  while (i <= middle)

   r1[k++] = r[i++];

 }

 else if (j <= last)

 {

  while(j <= last)

   r1[k++] = r[j++];

 }

 for (i = first; i < last + 1; i++)//将一次和并的结果保存到初始数组中

  r[i] = r1[i];

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储 测试