直接插入排序
直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
举例:
如有序列:12,4,3,23,16;从第二位开始i=2,每次比较从i-1到第1位(从后向前比较,大的向后移动,遇到小的停止移动,然后插入)
第一步:4<12,12移动至第2位,4插入第一位得:4,12,3,23,16;下次:i=3
第二步:依次比较,3<12,移动12到后一位,3<4,移动4到后一位,3插入得:3,4,12,23,16;下次:i=4
第三步:依次比较,23>12,不动;i=5
第四步:依次比较,16<23,移动23至后一位,16>12移动结束,插入16,得:3,4,12,16,23
完成。
1 import java.util.Arrays; 2 3 public class Sort { 4 /** 5 * 插入排序 6 * @param arr 7 */ 8 public static void straightSort(int[] arr) { 9 for (int i = 1; i < arr.length; i++) {//从第二位开始 10 if (arr[i] < arr[i - 1]) {//和前一位比较 11 int j, val = arr[i];//插入值 12 for (j = i - 1; arr[j] > val; j--) {//从后向前遍历比较,大于插入值向后移动一位 13 arr[j + 1] = arr[j]; 14 } 15 arr[j + 1] = val;//j值在循环中结束时减一,所以加1 16 } 17 } 18 } 19 20 public static void main(String[] args) { 21 int arr[] = {1, 331, 2, 5, 6, 12, 312, 13, 1, 33, 123, 7, 12, 133, 444, 11, 3, 14}; 22 int sirr[] = Arrays.copyOf(arr, arr.length); 23 int jrr[] = Arrays.copyOf(arr, arr.length); 24 straightSort(sirr);//插入排序 25 System.out.println("插入排序:" + Arrays.toString(sirr)); 26 Arrays.sort(jrr);//api 排序 27 System.out.println("api排序:" + Arrays.toString(jrr)); 28 } 29 }

浙公网安备 33010602011771号