冒泡排序
import java.util.Arrays;
public class BubbleSort {
private static void sort(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j + 1] < array[j]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] array = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
BubbleSort.sort(array);
System.out.println(Arrays.toString(array));
}
}
插入排序
import java.util.Arrays;
public class Insertsort {
public static void insertSort(int[] array) {
int i, j;
int key;
for (i = 1; i < array.length; i++) {
j = i;
key = array[i];
while (j > 0 && key < array[j - 1]) {
array[j] = array[j - 1];
j--;
}
array[j] = key;
}
}
public static void main(String[] args) {
int[] array = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
insertSort(array);
System.out.println(Arrays.toString(array));
}
}
归并排序
import java.util.Arrays;
public class MergeSort {
public static void merge(int[] array, int low, int mid, int high) {
int[] temp = new int[high - low + 1];
int i = low;// 左指针
int j = mid + 1;// 右指针
int k = 0;
// 把较小的数先移到新数组中
while (i <= mid && j <= high) {
if (array[i] < array[j]) {
temp[k++] = array[i++];
} else {
temp[k++] = array[j++];
}
}
// 把左边剩余的数移入数组
while (i <= mid) {
temp[k++] = array[i++];
}
// 把右边边剩余的数移入数组
while (j <= high) {
temp[k++] = array[j++];
}
// 把新数组中的数覆盖array数组
for (int k2 = 0; k2 < temp.length; k2++) {
array[k2 + low] = temp[k2];
}
}
public static int[] sort(int[] array, int low, int high) {
int mid = (low + high) / 2;
if (low < high) {
sort(array, low, mid);
sort(array, mid + 1, high);
merge(array, low, mid, high);
}
return array;
}
// 归并排序的实现
public static void main(String[] args) {
int[] array = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
MergeSort.sort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
}
快速排序
import java.util.Arrays;
public class QuickSort {
public static int partition(int[] array, int low, int high) {
int key = array[low];
while (low < high) {
while (low < high && array[high] >= key) {
--high;
}
array[low] = array[high];
while (low < high && array[low] <= key) {
++low;
}
array[high] = array[low];
}
array[low] = key;
return low;
}
public static void sort(int[] array, int low, int high) {
if (low < high) {
int pivot = partition(array, low, high);
sort(array, low, pivot - 1);
sort(array, pivot + 1, high);
}
}
public static void main(String[] args) {
int[] array = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
QuickSort.sort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
}
泛型快速排序
import java.util.Arrays;
public class QuickSortE {
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
public static <E> void swap(E[] array, int i, int j) {
if (i == j)
return;
E temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static <E> void quicksort(E[] array, int start, int end, Comparator<E> comparator) {
if (end - start <= 0) {
return;
}
int i = start;
int j = end - 1;
boolean movingI = true;
while (i < j) {
if (comparator.compare(array[i], array[j]) > 0) {
swap(array, i, j);
movingI = !movingI;
} else {
if (movingI) {
i++;
} else {
j--;
}
}
}
quicksort(array, start, i, comparator);
quicksort(array, i + 1, end, comparator);
}
public static <E> void quicksort(E[] array, Comparator<E> comparator) {
quicksort(array, 0, array.length, comparator);
}
public static void main(String[] args) {
Integer[] array = new Integer[] { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
quicksort(array, (a, b) -> a - b);
System.out.println(Arrays.toString(array));
}
}
随机选择枢轴(pivot)快速排序
import java.util.Arrays;
public class QuickSortRandomPivot {
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
public static <E> void swap(E[] array, int i, int j) {
if (i == j)
return;
E temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static <E> void quicksort(E[] array, int start, int end, Comparator<E> comparator) {
if (end - start <= 0) {
return;
}
int pivotIndex = (int) ((end - start) * Math.random()) + start;
swap(array, pivotIndex, end - 1);
// let's find the pivot.
int i = start;
int j = end - 1;
boolean movingI = true;
while (i < j) {
if (comparator.compare(array[i], array[j]) > 0) {
swap(array, i, j);
movingI = !movingI;
} else {
if (movingI) {
i++;
} else {
j--;
}
}
}
quicksort(array, start, i, comparator);
quicksort(array, i + 1, end, comparator);
}
public static <E> void quicksort(E[] array, Comparator<E> comparator) {
quicksort(array, 0, array.length, comparator);
}
public static void main(String[] args) {
Integer[] array = new Integer[] { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
quicksort(array, (a, b) -> a - b);
System.out.println(Arrays.toString(array));
}
}