标签:style http color io os ar java for 文件
java源码如下:
/** * * @author ruikaih * */ public class InsertSortTest { /** * @param args */ public static void insertionSort(Comparable[] data) { for (int index = 1; index < data.length; index++) { Comparable key = data[index]; //定义索引,遍历有序部分,不可直接用index,会修改index,影响外部循环 int position = index; // data[position - 1].compareTo(key) > 0表示升序。 //data[position - 1].compareTo(key) < 0表示降序 while (position > 0 && data[position - 1].compareTo(key) > 0) { data[position] = data[position - 1]; position--; } data[position] = key; } } public static void main(String[] args) { // TODO Auto-generated method stub Comparable[] c = { 14, 119, 123, 1, 45, 27, 1115, 21,0 }; insertionSort(c); for (int i = 0; i < c.length; i++) System.out.print(c[i]+","); } }
关键点:
外层循环遍历无序元素,如果待排序元素大于前面的元素则不需调整,反之,循环右移动,直到前面的元素小于自己。
第一个元素排除,从第二个开始,小于前面元素,循环移动,直到大于前面的元素。
while (index>0 && data[index -1] > data[index]){
data[index]=data[index-1]
index--;
}
data[index]=key
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。
线性插入排序算法的比较次数取决于待排序文件原来的有序程度。如果原始记录的关键字正好为递减排序(最坏情况),那么这时比较次数最多为n(n-1)/2次。即线性插入排序算法的时间复杂度为0(n2)
标签:style http color io os ar java for 文件
原文地址:http://my.oschina.net/hanruikai/blog/322669