package cn.com.dom4j.sort; import java.util.Arrays; public class Test2 { /* 插入排序 插入排序是最简单的排序算法之一 插入排序由 N - 1趟排序组成, 对于 p = 1到 N - 1趟, 插入排序保证从 0到位置 p - 1上的元素为已排序状态 基本思路: 在第 p趟, 我们将位置 p上的元素向左移动, 知道它在前 p + 1个元素中的正确位置被找到的地方 */ public static <AnyType extends Comparable<? super AnyType>> void insertionSort_1(AnyType[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = i; j > 0 && arr[j].compareTo(arr[j - 1]) < 0; j--) { swap(arr, j, j - 1); } } } /* 上面排序中存在的缺陷: 在寻找第 p个元素的正确位置时, 采用了相邻元素比较并交换位置的方式, 这样会产生多余赋值操作 解决方式: 记录第 p个元素的值, 逐一和前面元素比较, 比 p大的元素, 位置后移一个 (a[j] = a[j-1]), 直到遇到比 p小的元素. 最后把 p放在终止时的位置(第一个遇到的比 p小的元素后面)即可 */ /** * 优化过后的插入排序 */ public static <AnyType extends Comparable<? super AnyType>> void insertionSort_2(AnyType[] a) { int j; for (int p = 1; p < a.length; p++) { AnyType tmp = a[p]; for (j = p; j > 0 && tmp.compareTo(a[j - 1]) < 0; j--) a[j] = a[j - 1]; a[j] = tmp; } } /** * 交换数组中两个元素的位置 */ public static <AnyType extends Comparable<? super AnyType>> void swap(AnyType[] arr, int i, int j) { if (arr == null || arr.length <= 1 || i == j) { return; } AnyType tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } }
Java排序算法 [插入排序]
猜你喜欢
转载自blog.csdn.net/dom4j_/article/details/79816170
今日推荐
周排行