排序算法---直接插入排序算法
2016-04-18 12:24
204 查看
直接插入排序的思想
在一个已经有序的小序列的基础上,一次插入一个元素。刚开始这个有序的小序列只有1个元素,也就是第一个元素。比较是从有序序列的末尾开始,也就是把待插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面。否则一直往前找直到找到它该插入的位置。如果遇见一个与插入元素相等的,那么把待插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序仍是排好序后的顺序,所以插入排序是稳定的。
时间复杂度:
最优复杂度:当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况下会产生O(n^2)的复杂度。
最差复杂度:当输入数组为倒序时,复杂度为O(n^2)
插入排序比较适合用于“少量元素的数组”。
java实现:
排序算法的稳定性参考链接:
http://www.cnblogs.com/Braveliu/archive/2013/01/15/2861201.html
在一个已经有序的小序列的基础上,一次插入一个元素。刚开始这个有序的小序列只有1个元素,也就是第一个元素。比较是从有序序列的末尾开始,也就是把待插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面。否则一直往前找直到找到它该插入的位置。如果遇见一个与插入元素相等的,那么把待插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序仍是排好序后的顺序,所以插入排序是稳定的。
时间复杂度:
最优复杂度:当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况下会产生O(n^2)的复杂度。
最差复杂度:当输入数组为倒序时,复杂度为O(n^2)
插入排序比较适合用于“少量元素的数组”。
java实现:
public class insertSortTest { static void insertSort(int[] a) { int i,j; for (i = 1; i < a.length; i++) { int tmp = a[i];//待插入的元素 //从右向左找到最后一个大于tmp的元素的位置 for ( j = i - 1; j>=0 && a[j] > tmp; j--) { a[j + 1] = a[j]; //向后移动一位 } a[j+1] = tmp;//进行插入 } } public static void main(String[] args) { int[] b = { 1, 3,4,5,2,3,1 }; insertSort(b); for (int i = 0; i < b.length; i++) { System.out.print(b[i]+"\t"); } } }
排序算法的稳定性参考链接:
http://www.cnblogs.com/Braveliu/archive/2013/01/15/2861201.html
相关文章推荐
- JavaScript演示排序算法
- 插入排序
- 算法之排序算法的算法思想和使用场景总结
- php实现插入排序
- PHP版本常用的排序算法汇总
- JavaScript实现多种排序算法
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- Java数据结构及算法实例:插入排序 Insertion Sort
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- 排序算法的javascript实现与讲解(99js手记)
- C++中十种内部排序算法的比较分析
- Java实现几种常见排序算法代码
- 浅谈javascript实现八大排序
- javascript数据结构之双链表插入排序实例详解
- PHP常用的排序和查找算法
- JavaScript中九种常用排序算法
- STl中的排序算法详细解析
- 算法学习入门之使用C语言实现各大基本的排序算法