排序算法之插入排序
来源:互联网 发布:java 运行环境下载 编辑:程序博客网 时间:2024/06/08 15:12
插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。简单来说插入排序就是把小的插入已经排序序列的前面,已经排序的序列向后移位。
先写个简单的例子:
public class Test {public static void main(String[] args) {int[] values = { 8, 5, 6, 1, 7, 0 };values = sort(values);for (int i : values)System.out.print(i + " ");}public static int[] sort(int[] values) {if (values == null || values.length <= 1)return values;int i, j, key;for (i = 1; i < values.length; ++i) {key = values[i];for (j = i - 1; j >= 0; --j) {if (values[j] > key)values[j + 1] = values[j];elsebreak;}values[j + 1] = key;}return values;}}
如果后面的都是小值那么,它的效率并不高,如果后面都是大值,则需要移动的数据可能非常少,所以说他是不稳定的排序。
插入排序还有升级版,折半插入法,例如
public class Test {public static void main(String[] args) {int[] values = { 8, 5, 6, 1, 7, 0 };values = sort(values);for (int i : values)System.out.print(i + " ");}public static int[] sort(int[] values) {if (values == null || values.length <= 1)return values;// start开始位置,end结束位置,middle中间位置int start, end, middle;// 当前值int key;for (int i = 1; i < values.length; i++) {key = values[i];start = 0;end = i - 1;// 不断折半查找需要插入的位置while (start <= end) {middle = (start + end) / 2;if (key < values[middle])end = middle - 1;elsestart = middle + 1;}// 移动数据for (int j = i - 1; j >= end + 1; --j)values[j + 1] = values[j];values[end + 1] = key;}return values;}}
折半插入法,实际上是折半查找的应用。每次循环当前值前面的都是已经排好序的,拿当前值在前面已经排好序的数据中查找应该插入的位置,找到位置后只需要移动后面的数据就可以了。
阅读全文
0 0
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之 插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- android studio ndk开发中c语言中异常处理
- 在SQL Server 事务中使用Savepoints来保存提交点
- Mongoose deployment
- socket并发服务器(frok)
- CSDN-markdown编辑器使用教程
- 排序算法之插入排序
- 微信小程序开发demo
- java 制作炸弹人
- Tensorflow 01: mnist-softmax
- 未能加载文件或程序集“MySql.Data, Version=5.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它
- 解决maven与eclipse中@override出现must override a superclass method错误
- Android Studio遇到的问题及解决过程
- 在windons下写一个zip备份的python脚本
- SSH物流开发系统设计:定区的相关操作和设计