插入排序InsertSort
2015-08-13 23:21
183 查看
插入排序将元素依次插入到已经排好序的序列中。
基本原理:
插入排序从序列第二个元素开始寻找合适位置然后插入到前面元素组成的序列中。
每次元素插入前,序列有序。
插入后,序列依旧有序。
因为插入时会与前面已序的元素进行比对。找到应该插入的位置,移动元素,空出该位置,再将该元素插入到序列中。
上面的InsertSort嵌套有点多,可以修改为:
基本原理:
插入排序从序列第二个元素开始寻找合适位置然后插入到前面元素组成的序列中。
每次元素插入前,序列有序。
插入后,序列依旧有序。
因为插入时会与前面已序的元素进行比对。找到应该插入的位置,移动元素,空出该位置,再将该元素插入到序列中。
void InsertSort(int* pData, int num) { // i标识需要插入的元素 for (int i = 1; i < num; ++i) { // j标识i前面的元素 for (int j = 0; j < i; ++j) { if (pData[j] > pData[i]) { int temp = pData[i]; // 依次后移元素,空出j空间 for (int k = i; k > j; --k) pData[k] = pData[k - 1]; // 将元素插入 pData[j] = temp; } } } }
上面的InsertSort嵌套有点多,可以修改为:
void InsertSort(int* pData, int num) { // i标识需要插入的元素 for (int i = 1; i < num; ++i) { int j = 0; while (j < i && pData[j] < pData[i]) ++j; // 当前元素未找到插入位置,进行下一轮 if (j == i) continue; // 找到插入位置,由j标识 int temp = pData[i]; // 依次后移元素,空出j空间 for (int k = i; k > j; --k) pData[k] = pData[k - 1]; // 将元素插入 pData[j] = temp; } }
相关文章推荐
- 设计模式-创建型之建造者模式
- 持续集成实践
- mysql文档摘要续2
- 如何查看WAS生成的Snap.***.trc文件
- Leetcode 之 Subsets
- JavaScript 编程
- 机器学习中文参考手册
- iOS性能优化:Instruments使用实战
- 子类继承父类的变量和父类原有变量的关系
- IOS开发常用设计模式
- hdu 1013 Digital Roots(数论 模拟)
- 外观模式 Facade
- 小tip:中文英文左右padding一致两端对齐实现
- [推荐算法]Pearson Correlation Similarity 的python实现
- opencv中的机器学习
- Windows 10 Mobile 安装 apk
- 注册美国公司
- 编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合
- SDL事件查询函数:SDL_PeepEvents()
- [机器学习]opencv