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

来源:互联网 发布:软件项目经理面试题 编辑:程序博客网 时间:2024/04/20 17:59

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;}}






0 0
原创粉丝点击