排序算法之直接插入排序
2016-01-18 13:23
267 查看
直接插入排序是最直观的一种排序方式,记忆力小时候就是用这种方式来对几个数排序的,我们最熟悉的抓取扑克牌用的就是直接插入排序算法。
少废话,先看代码
输出结果
原理
将数组分为有序部分和无序部分,0到i - 1个元素为有序部分,i 到max length元素为无序部分,把第i个元素依次与第i - 1到第0个元素比较大小,找到一个position,position左侧元素比第i个元素要小,右侧元素比第i个元素要大,将第i个元素放置在此,依次将第i + 1到max length元素按此种排序找到对应position并放置,完成整个排序算法。
模拟动画
![](http://cricode.qiniudn.com/insert-sort.gif)
时间复杂度
T(n) = O(n^2),属于稳定排序算法之一。
少废话,先看代码
public class InsertSort { public static void main(String[] args) { int[] array = { 9, 8, 7, 6, 5, 4, 3, 2, 1 }; sort(array); printArray(array); } public static void sort(int[] array) { if (array == null || array.length < 2) return; for (int i = 1; i < array.length; i++) { int currentValue = array[i]; int position = i; for (int j = i - 1; j >= 0; j--) { if (array[j] > currentValue) { array[j + 1] = array[j]; position--; } else { break; } } array[position] = currentValue; snp(array); } } public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.println("array[" + i + "] = " + array[i]); } } public static void snp(int[] arrays) { for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i] + " "); } System.out.println(); } }
输出结果
array[0] = 1 array[1] = 2 array[2] = 3 array[3] = 4 array[4] = 5 array[5] = 6 array[6] = 7 array[7] = 8 array[8] = 9
原理
将数组分为有序部分和无序部分,0到i - 1个元素为有序部分,i 到max length元素为无序部分,把第i个元素依次与第i - 1到第0个元素比较大小,找到一个position,position左侧元素比第i个元素要小,右侧元素比第i个元素要大,将第i个元素放置在此,依次将第i + 1到max length元素按此种排序找到对应position并放置,完成整个排序算法。
模拟动画
![](http://cricode.qiniudn.com/insert-sort.gif)
时间复杂度
T(n) = O(n^2),属于稳定排序算法之一。
相关文章推荐
- mybatis查询有关联关系并且有相同字段的两张表问题解决
- [Django](1093, "You can't specify target table 'fee_details_invoices' for update in FROM clause") 错误
- netbeans等宽字体却不支持中文
- 让一个label中的text显示不同的颜色,字体
- [JSOI2008]球形空间产生器 (高斯消元)
- 65条最常用正则表达式
- ios基本控件之UIButton
- Java并发编程实战学习笔记(三)-线程封闭
- 网页性能优化工具
- Android Studio 配置 androidAnnotations框架详细步骤
- BZOJ 4197: [Noi2015]寿司晚宴( dp )
- 排序-插入类排序-直接插入排序
- centos6.5安装及管理docker
- Android Design Support Library——Snackbar
- Python算法题----逆序列表
- ViewDidLoad和ViewWillAppear两者的区别
- PHPDoc 学习记录
- [LeetCode] Odd Even Linked List 奇偶链表
- 查看apk签名
- ios基本控件之UIAlertView