4.2_8种常用排序算法2(插入排序:直接插入排序+希尔排序)
【插入排序】
【直接插入排序实例】
package com.sort.demo2; import java.util.Arrays; /** * 插入排序 */ public class InsertSort { public static void main(String[] args) { int[] arr = new int[]{1,4,5,7,3,9,8,0,2,6}; System.out.println(Arrays.toString(arr)); insertSort(arr); System.out.println(Arrays.toString(arr)); } public static void insertSort(int[] arr) { //遍历所有的数字 for (int i=1;i<arr.length;i++){ //如果当前数字比前一数字小 if(arr[i]<arr[i-1]){ //把当前遍历的数字存起来 int temp = arr[i]; int j; for (j=i-1;j>=0&&temp<arr[j];j--){ //把前一个数字赋给后一个数字 arr[j+1]=arr[j]; } //把临时变量(for循环外层的当前元素)赋给不满足条件的后一个元素 arr[j+1]=temp; } } } }
【希尔排序】
【实例】
package com.sort.demo2; import java.util.Arrays; /** * 希尔排序 */ public class ShellSort { public static void main(String[] args) { int[] arr = new int[]{1,4,5,7,3,9,8,0,2,6}; System.out.println(Arrays.toString(arr)); shellSort(arr); System.out.println(Arrays.toString(arr)); } public static void shellSort(int[] arr) { //遍历所有的步长 for (int d=arr.length/2;d>0;d=d/2){ //遍历所有元素 for(int i=d;i<arr.length;i++){ //遍历本组中的所有元素 for (int j=i-d;j>=0;j=j-d){ //如果当前元素>加上步长后的那个元素 if(arr[j]>arr[j+d]){ int temp=arr[j]; arr[j] = arr[j+d]; arr[j+d]=temp; } } } } } }