堆排序
public class Heap { public void sort(int[] nums) { int N = nums.length - 1; for (int k = N / 2; k >= 1; k--) { sink(nums, k, N); } while (N > 1) { swap(nums, 1, N--); sink(nums, 1, N); } } private void sink(int[] nums, int k, int N) { while (2 * k <= N) { int j = 2 * k; if (j < N && less(nums, j, j + 1)) j++; if (!less(nums, k, j)) break; swap(nums, k, j); k = j; } } public void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } public boolean less(int[] nums, int i, int j) { return nums[i] - nums[j] < 0; } }
快速排序
public class QuickSort { public void sort(int[] nums) { sort(nums, 0, nums.length - 1); } public void sort(int[] nums, int l, int h) { if (h <= l) return; int j = partition(nums, l, h); sort(nums, l, j - 1); sort(nums, j + 1, h); } public int partition(int[] nums, int l, int h) { int i = l, j = h + 1; int v = nums[l]; while (true) { while (i < h && nums[++i] < v) ; while (j > l && nums[--j] > v) ; if (j <= i) break; swap(nums, i, j); } swap(nums, l, j); return j; } public void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
冒泡排序
public class Bubble { public void sort(int[] nums) { int N = nums.length; boolean hasSorted = false; for (int i = N - 1; i > 0 && !hasSorted; i--) { hasSorted = true; for (int j = 0; j < i; j++) { if (less(nums,j+1, j)) { hasSorted = false; swap(nums, j, j + 1); } } } } public boolean less(int[] nums,int i,int j){ return nums[i]-nums[j]<0; } public void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }