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

【排序算法】直接插入排序(java实现)

2016-04-28 16:25 711 查看

1.基本思想:

在排序算法中算是一种非常简单直观的排序算法。将第一个元素作为已排好的序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

2.算法分析:

时间复杂度:O(N^2)

空间复杂度:O(1)

稳定性: 稳定

3.算法实现:

//直接插入
public static void InsertSort(int[] array){
for (int i = 1 ;i < array.length ; i++){
int t = array[i];
int j =i-1;
while(j >= 0 && array[j] > t){
array[j+1] = array[j];
j--;
}
array[j+1] = t;  //将待排元素插入正确位置
}
}


4.算法优化:

对于之间插入排序,在每趟插入过程中,都进行了两项工作:

(1)从前面的子序列中查找出带插入元素应该被插入的位置

(2)给插入位置腾出空间,将带插入元素复制到表中插入位置。

该算法总是变比较边移动。因为被比较的子序列是有序是,可以考虑二分查找的方法进行,虽然这样的比较次数变少约O(nlog2n),但移动次数不变,仍为O(N^2).

//折半插入
public static void InsertSort(int[] array){
int j;
for (int i = 1 ;i < array.length ; i++){
int low = 0, high = i-1;
int insert = array[i];
//二分查找待排元素应该插入的位置
while(low <= high){
int mid = (low + high)/2;
if (insert > array[mid]){
low = mid +1;
}else{
high = mid -1;
}
}
for (j = i; j > low ; j--){
array[j] = array[j-1];
}
array[j] = insert;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: