【插入排序】java
【直接插入排序實例】shell
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; } } } }
【希爾排序】spa
【實例】code
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; } } } } } }