排序算法-插入排序,java实现插入排序,算法图形化图解排序步骤。
排序思想
- 认定数组前n-1的元素是有序的,在拿第n个元素时,与前n-1个元素做比较,插入相应的位置
- 开始时,从第二个元素开始拿,与第一个元素比较,比第一个元素大插在它的右边,小插到左边
- 再拿第三个元素,与前两个元素比较,插入适当的位置,依次类推,直到数组排序完成。
算法图形化
代码实现
排序代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
@Service("insertionSortService") public class InsertionSortServiceImpl implements IInsertionSortService {
private static Integer allStep = 0; private static Integer realStep = 0;
@Override public List<InsertionSortResult> sort(Comparable[] arrays) throws Exception {
List<InsertionSortResult> resultList = new ArrayList<>(); SortUtil.show(arrays);
int arrLength = arrays.length; for (int i = 0; i < arrLength-1; i++) { for (int j = i+1; j > 0; j--) { if(SortUtil.less(arrays[j], arrays[j-1])) {
SortUtil.exch(arrays, j, j - 1); SortUtil.show(arrays);
}else{
break; } } }
assert SortUtil.isSorted(arrays);
return resultList;
}
}
|
工具类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
public class SortUtil {
public static boolean less(Comparable var0, Comparable var1) { return var0.compareTo(var1) < 0; }
public static boolean less(Object v, Object w, Comparator comparator) { return comparator.compare(v, w) < 0; }
public static boolean less(Comparable[] var0, int var1, int var2) { return var0[var1 - 1].compareTo(var0[var2 - 1]) < 0; }
public static void exch(Object[] var0, int var1, int var2) { Object var3 = var0[var1]; var0[var1] = var0[var2]; var0[var2] = var3; }
public static boolean isSorted(Comparable[] var0) { return isSorted(var0, 0, var0.length - 1); }
public static boolean isHsorted(Comparable[] var0, int var1) { for(int var2 = var1; var2 < var0.length; ++var2) { if (less(var0[var2], var0[var2 - var1])) { return false; } }
return true; }
public static boolean isSorted(Comparable[] var0, int var1, int var2) { for(int var3 = var1 + 1; var3 <= var2; ++var3) { if (less(var0[var3], var0[var3 - 1])) { return false; } }
return true; }
public static void showLn(Comparable[] var0) { for(int var1 = 0; var1 < var0.length; ++var1) { System.out.println(var0[var1]); }
}
public static void show(Comparable[] var0) { for(int var1 = 0; var1 < var0.length; ++var1) { System.out.print(var0[var1]+" "); } System.out.println();
} }
|