栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

基础算法——归并排序 c语言

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基础算法——归并排序 c语言

3.归并排序

主要思想:分治。

步骤:

1.确定分界点:mid=(left+right)/2;

2.分别递归排序right and left;

3.归并左右两边。

归并方法:1)两指针分别指向两数组的第一个数,数列最小值是两者其中之一;

2)取两指针所指数的最小值,作为有序数组的下一个数;

3)被取值的指针后移一位,再与另一指针所指数比较;

4)重复上述过程,直到有一数组值被取完;

5)将数组剩余的数直接连接到有序数列后。

eg.从小到大
void merge_sort(int q[], int l, int r)
{
     if (l >= r)return; //未排列数列只剩一个或没有数时退出
     //确定分界点
     int mid = (l + r) / 2;
     //两边分别递归
     merge_sort(q, l, mid);
     merge_sort(q, mid + 1, r);
     //合二为一
     int k = 0, i = l, j = mid + 1;//i取第一个数组,j取第二个
     while (i <= mid && j <= r)
     {
          if (q[i] <= q[j])
          {
               t[k++] = q[i++];
          }
          else
          {
               t[k++] = q[j++];
          }
     }
     //如果有一数组已经被去完,则直接连接剩余的数
     while (i <= mid)
     {
          t[k++] = q[i++];
     }
     while (j <= r)
     {
          t[k++] = q[j++];
     }
     //把替换数组t存入原数组
     for (i = l,j=0; i <= r; j++,i++)
     {
          q[i] = t[j];
     }
}
eg.从小到大
void merge_sort(int q[], int l, int r)
{
     if (l >= r)return; 
     
     int mid = (l + r) / 2;
     
     merge_sort(q, l, mid);
     merge_sort(q, mid + 1, r);
     
     int k = 0, i = l, j = mid + 1;
     while (i <= mid && j <= r)
     {
          if (q[i] >= q[j])//只需更改此处运算符号
          {
               t[k++] = q[i++];
          }
          else
          {
               t[k++] = q[j++];
          }
     }
     
     while (i <= mid)
     {
          t[k++] = q[i++];
     }
     while (j <= r)
     {
          t[k++] = q[j++];
     }
     
     for (i = l,j=0; i <= r; j++,i++)
     {
          q[i] = t[j];
     }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号