InsertSort

code 1:

 1 @SuppressWarnings("unchecked")
 2 public static <E> E[] insertSort(E[] array) {
 3     int j;
 4     for (int i = 1; i < array.length; i++) {
 5         Comparable<E> c = (Comparable<E>) array[i]; // 待插入的值
 6         j = i;
 7         while (j > 0 && c.compareTo(array[j - 1]) < 0) {
 8             // 依次比较[j, 0]的值, 如果当前值小就移位
 9             array[j] = array[j - 1];
10             j--;
11         }
12         array[j] = (E) c; // 插入恰当的位置
13     }
14     return array;
15 }

code 2:

 1 public static <E> E[] insertSort(E[] array, Comparator<E> c) {
 2     if (c == null)
 3         return insertSort(array);
 4     int j = 0;
 5     for (int i = 1; i < array.length; i++) {
 6         E temp = array[i];
 7         j = i;
 8         while (j > 0 && c.compare(temp, array[j - 1]) < 0) {
 9             array[j] = array[j - 1];
10             j--;
11         }
12         array[j] = temp;
13     }
14     return array;
15 }
时间: 2024-10-10 07:37:06

InsertSort的相关文章

排序算法FIVE:插入排序InsertSort

1 /** 2 *插入排序思路:O(n^2) 3 * 最外层一个循环,从第二个数到最后一个,变量为i 4 * 每个数存储在key变量中 5 * 变量j,是左边已经排好序的数组的上限 6 * 判断key与前面每一个数比较 1,3,5,2,4,6,8,5,9,10 7 * <------- 8 * 如果key小于前一个并且已经排好序的数组没有越界 9 * 调换两个数 10 * j向左移 11 * 12 * 把key放在指定位置 j+1 13 * 14 */ 15 16 public class In

《算法导论》习题2.3-6 改进的InsertSort

InsertSort中有关键的一步是把当前元素A[i]插入到已经排好序的A[1,i-1]的合适的位置上,在原始的InsertSort算法中, 采用的是从后往前一步一步查找的方法,习题2.3-6要求利用习题2.3-5中的binary search的方法,加速这个插入的过程. 把binary search 的算法稍加修改,就可以返回正确的,插入元素的位置: public static int findInsertPlace(int [] A,int target,int a, int b) { in

插入排序--InsertSort

算法导论,插入排序 public class InsertSort { public static double [] sort(double [] num) { for(int i =1; i<num.length;i++) { double temp = num[i]; int j=i-1; while(j>=0 && temp < num[j]) { num[j+1]=num[j]; j--; } num[j+1] = temp; } return num; } p

php quickSort insertSort 快速 插入排序

<?php function insert_sort($arr){ $count = count($arr); for($i=1; $i<$count; $i++){ $tmp = $arr[$i]; $j = $i-1; while($arr[$j]>$tmp){ $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; $j--; if($j<0){ break;//这里用continue依旧报错,不知什么元因?报错的是array索引出现负数 } } }

排序--InsertSort优化

InsertSort:(以升序为例) 插入排序的基本思想是: 每次将一个待排的记录,按照其关键字的大小,插入到前面已经排好序的有序区中适当的位置,直到全部记录插入完毕为止. 假设待排序的记录存放在数组R[0..n]中,初始时R[0]是一个有序区,R[1..n]是无序区,从i=1开始,依次将R[i]插入到有序区R[0..i-1]中,生成一个包含n个记录的有序区. 根据插入排序的思想,我们可以写出如下代码: void InsertSort(int *arr , int len) { int i =

algorithm ch2 insertsort

刚开始看到insertsort,思路就是使用新来的元素与前述已经排好序的元素比较.然后进行插入或者跳到下一次比较. 实现的代码如下: void InsertSort(int *pArray, int iSortNum) { int *pTemp = pArray; int iLoop = 0; int jLoop = 1; for(; jLoop != iSortNum ; ++jLoop) { int x = pTemp[jLoop]; iLoop = jLoop - 1; while(iLo

经典排序算法(2) -插入排序 InsertSort

插入排序(InsertSort)在<<算法导论>>里的描述相当贴切:插入排序非常类似于整扑克牌.在开始摸牌时,左手是空的,牌面朝下放在桌上.接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上.为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较.无论什么时候,左手中的牌都是排好序的.如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数.如果输入数组是逆序排列的,将出现最坏情况.平均情况与最坏情况一样,其时间代价是O(n^2

InsertSort 插入排序

# InsertSort 插入排序_Python实现 def insert_sort(li): for i in range(1, len(li)): # 此处选择从第二个开始且len不减一,因为计算框从i-1开始, 整体需要往后推一格 temp = li[i] # 当前所对比的值 j = i - 1 # 需要对比的开始坐标 while j >= 0 and temp < li[j]: li[j+1] = li[j] j -= 1 li[j+1] = temp # 计算完毕或无计算, 把值放在

两种插入排序算法java实现

两种方法都编译运行通过,可以当做排序类直接使用. 折半插入排序: public class Sort1 { public static void main(String[] args) { InsertSort sort = new InsertSort(); sort.InsertSort(); int[] arr = sort.getarr(); System.out.println(); System.out.println("排序之后:"); for (int ar : arr