初级排序算法(二)

来源:互联网 发布:php saas平台 源码 编辑:程序博客网 时间:2024/05/29 18:28

1. 选择排序的递归实现

public static void chooseSortRecursion(int[] arr) {recursion(arr, 0);}public static void recursion(int[] arr, int index) {int N = arr.length;if (index >= N - 1) return;int min = index;for (int i = index + 1; i < N; i++) {if (arr[i] < arr[min]) {exch(arr, i, min);}}recursion(arr, ++index);}

选择排序是从位置0开始选择最小的元素,每个位置的问题一样,只是问题的规模变小,可以选择递归。

从位置0到N - 2即可,因为到N - 1时只剩一个元素,不需要再选择。


2.插入排序的递归实现

public static void insertSortRecursion(int[] arr) {recursion(arr, 1);}public static void recursion(int[] arr, int index) {int N = arr.length;if (index > N - 1) return;for (int i = index; i > 0; i--) {if (arr[i] < arr[i-1]) {exch(arr, i-1, i);}}recursion(arr, ++index);}

3.复习一遍希尔排序

public static void shellSort(int[] arr) {int N = arr.length;int h = 1;while (3*h + 1 <= N) h = 3*h + 1;while (h >= 1) {for (int i = h; i < N; i++) {for (int j = i; j >= h; j -=h) {if (arr[j-h] > arr[j]) {exch(arr, j-h, j);}}}h = (h - 1) / 3;}}public static void exch(int[] arr, int a, int b) {if (a == b) return;int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}