以下只介绍两种插入排序方法:直接插入排序和希尔排序
直接插入排序分为2种:带哨岗的和不带哨岗的
- 不带哨岗的
package lesson01;
import java.util.Random;
public class demo01_InsertionSort {
public static void insertSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int i, j, temp;
for (i = 1; i < arr.length; i++) {
temp = arr[i];
for (j = i - 1; j >= 0 && temp < arr[j]; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
public static int[] generateRandomArray(int arrSize, int arrValue) {
Random r = new Random();
int arr[] = new int[r.nextInt(arrSize) + 1];
System.out.println("======" + arr.length);
for (int i = 0; i < arr.length; i++) {
arr[i] = ((r.nextInt(arrValue) + 1) - (r.nextInt(arrValue) + 1));
}
return arr;
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++)
System.out.print(" " + arr[i]);
}
public static void main(String[] args) {
int arrSize = 10;
int arrValue = 100;
int arr[] = generateRandomArray(arrSize, arrValue);
printArray(arr);
insertSort(arr);
System.out.println();
printArray(arr);
}
}
- 带哨岗的
package lesson01;
import java.util.Random;
public class demo01_InsertionSort {
public static void insertSortWithGuard(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int help[] = new int[arr.length + 1];
for (int k = 0; k < arr.length; k++) {
help[k + 1] = arr[k];
}
int i, j;
for (i = 1; i < help.length; i++) {
help[0] = help[i];
for (j = i - 1; help[0] < help[j]; j--) {
help[j + 1] = help[j];
}
help[j + 1] = help[0];
}
for (int k = 0; k < arr.length; k++)
arr[k] = help[k + 1];
}
public static int[] generateRandomArray(int arrSize, int arrValue) {
Random r = new Random();
int arr[] = new int[r.nextInt(arrSize) + 1];
System.out.println("======" + arr.length);
for (int i = 0; i < arr.length; i++) {
arr[i] = ((r.nextInt(arrValue) + 1) - (r.nextInt(arrValue) + 1));
}
return arr;
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++)
System.out.print(" " + arr[i]);
}
public static void main(String[] args) {
int arrSize = 10;
int arrValue = 100;
int arr[] = generateRandomArray(arrSize, arrValue);
printArray(arr);
insertSortWithGuard(arr);
System.out.println();
printArray(arr);
}
}
希尔排序
package lesson01;
public class demo01_shellSort {
public static void shellSort(int[] arr) {
int dk = arr.length / 2;
while (dk >= 1) {
shellInsert(dk, arr);
dk /= 2;
}
}
public static void shellInsert(int dk, int arr[]) {
int temp, i, j;
for (i = dk; i < arr.length; i++) {
temp = arr[i];
for (j = i - dk; j >= 0 && temp < arr[j]; j -= dk)
arr[j + dk] = arr[j];
arr[j + dk] = temp;
}
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++)
System.out.print(" " + arr[i]);
}
public static void main(String[] args) {
int arr[] = { 52, 39, 67, 95, 70, 8, 25, 52, 56, 5 };
printArray(arr);
shellSort(arr);
System.out.println();
printArray(arr);
}
}