直接插入排序
来源:互联网 发布:软件项目验收申请报告 编辑:程序博客网 时间:2024/06/03 19:52
上一篇写了技术基数排序,这节是关于插入排序!
插入排序的思想十分简单,打扑克牌的时候我们给牌放位置的方法就是直接插入排序。
首先我们拿到第一张牌的时候 例如 8,这个时候它是第一张,所以不需要比较,可以确定暂时的位置是0 (数组的下标从0开始,在这里就用0了)。然后拿到了一张 5,这个时候把5与前面的牌像比较,5 < 8,所以5应该插到8的前面去,8应该往后移动一位。此时在【0】的位置上是5,在【1】的位置上是8,之后我们拿到了 9,与前面的牌相比较是有序的,所以不需要做调整,9的位置就是【2】,然后我们又拿到了7此时,与前面的数值一一比较,从前往后找到第一个大于7的数字,该牌的位置就是7应该在的位置,那么此时【1】位置上换成7,8和9依次向后移动一位。【2】的位置上是8, 【3】的位置是9。然后我们拿到牌之后都是按照这个方法来调整即可。
下面是实现的代码:
public class InsertSort implements Sort { public static void main(String[] s) { Sort sort = new InsertSort(); int arr[] = {-12, 5, 6, -5, -5, 569, 125, -58, 9, 36}; sort.sort(arr); } @Override public void sort(int[] arr) { for (int i = 1; i < arr.length; i++) { int insertPosition = -1; int cache = arr[i]; //缓存当前的值 //从前面排好序的数字中间找到第一个大于当前数字的,它的位置就是当前数字应该在的位置。 for (int m = 0; m < i; m++) { if (arr[i] < arr[m]) { insertPosition = m; break; } } //如果找到了了,就把数字依次往后移动一位。 if (insertPosition != -1) { for (int j = i; j > insertPosition && insertPosition != -1; j--) { arr[j] = arr[j - 1]; } // 把当前数字放到腾出来的位置上去。 arr[insertPosition] = cache; } for (int el : arr) { System.out.print(el + " "); } System.out.println(); } }}
直接插入排序是稳定的,我们从前往后排序的时候,两个相同的值先出现的必定排在后出现的前面。
最后算法的时间复杂度上是O(n^2)
1 0
- 插入排序--直接插入
- 插入排序------直接插入
- 插入排序---直接插入
- 排序:直接插入排序
- 排序---直接插入排序
- 排序 -- 直接插入排序
- 排序---直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序:直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 插入排序--直接插入排序
- 插入排序-直接插入排序
- 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作
- 如何修改WAMP中mysql默认空密码&重新登录phpmyadmin
- 经典排序算法 - 归并排序Merge sort
- 关于 Android 源码
- 理解:虚拟内存,虚拟内存地址,物理内存,物理内存地址
- 直接插入排序
- Swift(六、控制流)
- wamp修改mysql默认空密码2
- servlet处理的基本流程
- xcode7的那些坑-“Your binary is not optimized for iPhone 5” (ITMS-90096) when submitting
- OptionsMenu按钮不显示的解决方法
- 2015_11_01_水过去的10月
- Binary Search Tree
- S2SH+ajax+json-----jQuery中$.ajax解析xml、json格式数据