您的位置:首页 > 编程语言 > Java开发

排序算法总结(2)--插入排序

2017-05-18 20:42 162 查看

一、简介

插入排序对于少量元素的排序以及部分有序数组的排序,是一个有效的算法。插入排序的工作原理和整理一手扑克牌的过程一样。开始时,左手为空,每次从桌子上拿一张扑克牌并插入左手正确的位置。为了找到这张牌的正确位置,我们从右到左将它与手中的扑克牌比较,直到找到一张比它小的牌,将它插入这张牌的后面。此时手中所有的牌已经有序。在计算机实现中,为了要给插入的牌腾出位置,需要将一部分元素在插入之前右移。

二、伪代码

算法:插入排序的非递归算法
输入:未排序的数组 A
输出:已排序的数组 A
InsertionSort(A)
for j=1 to A.length-1
key=A[j];
// 将array[j]插入到已排序的数组[1,...,j-1]中
i=j-1;
while i>=0 and A[i]>key
A[i+1]=A[i];
i=i-1;
A[i+1]=key;


三、代码实现

public class Method {
public static void main(String[] args) {
int[] array={31,41,59,26,41,58};
insertionSort(array);
}

public void insertionSort(int[] array){
for (int j=1;j<array.length;j++){
int key=array[j];
// 将第j个元素插入前面排序好的序列里
int i=j-1;
while (i>=0 && array[i]>key) {
array[i+1]=array[i];
i--;
array[i+1]=key;
}
}
}
}


四、复杂度分析

时间复杂度:

最好情况:O(n)

最坏情况:O(n^2)

平均情况:O(n^2)

空间复杂度:O(1),原址排序

五、注意事项

对于随机排列的长度为n且元素不重复的数组来说,最坏情况下需要大约n(n−1)/2次比较和大约n(n−1)/2次移动,最好情况下需要n−1次比较和0次移动。

插入排序对于部分有序的数组效果很好。以下是几种典型的部分有序数组:

(1). 数组中每个元素距离他最终的位置不远

(2). 一个有序的大数组接一个小数组

(3). 数组中只有几个元素的位置不正确

插入排序在一次循环之后不能确定任何一个元素的最终位置,直到所有元素排序好之才能确定元素的最终位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法 java
相关文章推荐