您的位置:首页 > 其它

排序算法---直接插入排序算法

2016-04-18 12:24 204 查看
直接插入排序的思想

在一个已经有序的小序列的基础上,一次插入一个元素。刚开始这个有序的小序列只有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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息