基础算法3——归并排序 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];}
}
基础算法3——归并排序 c语言相关推荐
- 排序算法之归并排序 ( C语言版 )
归并排序 :(Merge Sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即 ...
- 排序算法之——归并排序 C语言实现
一 .归并排序的思路: 归并排序采用的是分治的思想,就是将数组进行分隔,直到最小的单位(两个元素),然后对最小的单位进行排序.最后将排好序的单位依次遍历到数组中. 1 将数组进行分隔,直到不能再分的最 ...
- 算法基础课-基础算法
第一讲 基础算法 快速排序 归并排序 二分 整数二分模板 AcWing 789. 数的范围(整数二分法) AcWing 1236.递增三元组 AcWing 730. 机器人跳跃问题 AcWing 12 ...
- c++ 快速排序_C语言必学的12个排序算法:归并排序(第8篇)
题外话很多童鞋感受算法比较难度,的确,算法其实和C语言本身关系不大,算法是计算机科学家利用丰富的数学和算法设计知识研究出来,如今我们只需拿来主义,学习使用即可,当然这需要一定的努力过程. [C语言必学 ...
- 【排序算法】归并排序(C语言)
[排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...
- C语言基础算法:魔方阵
C语言基础算法:魔方阵. 核心玩法:第一个元素放置第一排(第0行)中间位置,依次往右上方填充数据, 若是 1.右上角行,列越界,该元素放置上一元素下方a(i+2)(j-1)位置 2.右上角行越界,而列 ...
- 一篇解双链表(0基础看)(C语言)《数据结构与算法》
目录 序言 带头双向循环链表 1. 概念 2. 效果展示图 3. 接口实现 3.01. 本文章要实现的接口 3.02. 双链表的实现 3.03. 双链表的初始化 3.04. 打印链表 3.05. 动 ...
- 经典c语言基础代码大全,10个经典的C语言面试基础算法及代码
<10个经典的C语言面试基础算法及代码>由会员分享,可在线阅读,更多相关<10个经典的C语言面试基础算法及代码(24页珍藏版)>请在人人文库网上搜索. 1.10个经典的C语言面 ...
- 【基础算法】算法,从排序学起(一)
本文目录 1.导言 2.谈谈排序 2.1 何为排序?(What is sorting?) 2.2 排序的应用(Why sorting?) 2.3 常见排序算法的种类(How to sort?) 3.基 ...
最新文章
- 预测----三个原则
- 使用html测试数据库连接与操作(含界面) 第一步界面设计
- 直播预告 | 共识、区块链和全球一体化经济
- 推荐系统遇到曝光偏差怎么办?用对比学习!
- java的set接口_Java集合-Set接口
- 关于高德地图Android开发时地图只显示一次、第二次打开不定位的解决办法
- LeetCode 167. 两数之和 II - 输入有序数组(双指针)
- Python面试真题第二节
- 易邮服务器com组件注册失败,com组件注册失败有什么办法可以解决
- 你大学生活最美好的时刻是?
- 网易云音乐PC客户端加密API逆向解析
- android开发中对图片的处理方式汇总
- 神奇的「种子法则」:意念具有不可思议的超能量
- 已然神话的区块链的应用了解一下-MGCEX
- 研究表明:手机移动数据可用于预测犯罪行为
- 一帘心事碎碎念,一眸雪舞剪剪风
- 【优化系列】汇编优化技术(九):WebAssembly(wasm)平台SIMD优化
- 图像分割(四)—— Is Space-Time Attention All You Need for Video Understanding?
- OracleTechnologyNetwork
- 安装Microsoft.UI.Xaml.2.6(WSA安卓子系统安装缺失)