在Java中,排序可以通过多种算法实现,以下是一些常见的排序方法:
直接插入排序
基本思想:将一个记录插入到已经排好的有序表中。
Java实现示例:
```java
public class InsertionSort {
public static void sort(int[] array) {
for (int i = 1; i < array.length; i++) {
int key = array[i];
int j = i - 1;
while (j >= 0 && array[j] > key) {
array[j + 1] = array[j];
j = j - 1;
}
array[j + 1] = key;
}
}
}
希尔排序
基本思想:插入排序的一种优化,通过将数组分成若干个子序列来工作,然后逐步减少子序列的数量,最终变为简单插入排序。
Java实现示例:
```java
public class ShellSort {
public static void sort(int[] array) {
int gap = array.length / 2;
while (gap > 0) {
for (int i = gap; i < array.length; i++) {
int temp = array[i];
int j = i;
while (j >= gap && array[j - gap] > temp) {
array[j] = array[j - gap];
j = j - gap;
}
array[j] = temp;
}
gap /= 2;
}
}
}
选择排序
基本思想:在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
Java实现示例:
```java
public class SelectionSort {
public static void sort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
}
}
归并排序
基本思想:采用分治法的一个典型应用。将数组分成两半,分别对它们进行排序,然后将结果合并起来。
Java实现示例:
```java
public class MergeSort {
public static void sort(int[] array) {
if (array.length > 1) {
int mid = array.length / 2;
int[] left = new int[mid];
int[] right = new int[array.length - mid];
System.arraycopy(array, 0, left, 0, mid);
System.arraycopy(array, mid, right, 0, array.length - mid);
mergeSort(left);
mergeSort(right);
merge(array, left, right);
}
}
private static void merge(int[] array, int[] left, int[] right) {
int i = 0, j = 0, k = 0;
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
array[k++] = left[i++];
} else {
array[k++] = right[j++];
}
}
while (i < left.length) {
array[k++] = left[i++];
}
while (j < right.length) {
array[k++] = right[j++];
}
}
}
快速排序
基本思想:通过一个基准值将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
Java实现示例: