算法学习之插入排序
2021/5/22 22:27:13
本文主要是介绍算法学习之插入排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、总体思路
分成两个区域:排好序区(数组前面部分,绿色部分) + 待排序区(数组后面部分,黑色部分)。
不断将后面未排序区的数据往已排序区插入,使得已排序区不断扩大。
A | B | C | D | E | F | G | H |
初始时刻:已排序区只有一个数。
每趟:尝试将未排序区第一个元素插入已排序区,具体做法:从已排序区末尾元素开始往前遍历,若未排序区第一个元素比之小,则可以加入已排序区,且需从已排序区腾出一个位置出来。
A | B | C | D | E | F | G | H |
如上:A,B,C属于排好序区域,D及其之后为待排序区。将D及其之后的数据往A,B,C已排序区域插入。
二、优化
从后往前遍历排序区过程中,若已经比元素大,则不用再往前遍历了,因为更前面的数更小,可以提前退出本趟查找,不用将排序区遍历完。
三、代码
// 插入排序 void InsertSort(int arrayData[], int arraySize) { int i, j; for (i = 0; i < arraySize - 1; i++) { int tempValue = arrayData[i + 1]; int tempIdx = i + 1; for (j = i; j >= 0; j--) { if (tempValue < arrayData[j]) { tempIdx = j; arrayData[j + 1] = arrayData[j]; // 往后移动空出位置 } else if (tempValue > arrayData[j]) { break; // 不用再往前比较了,前面存的更小 } } if (tempIdx != i + 1) { arrayData[tempIdx] = tempValue; } } }
这篇关于算法学习之插入排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南