教你如何实现Java八大排序
一、流程概述
首先,我们需要了解Java八大排序的具体步骤及每一步需要做什么。下面是整个流程的概述表格:
步骤 | 排序算法 | 代码实现 |
---|---|---|
1 | 冒泡排序 | bubbleSort() |
2 | 选择排序 | selectionSort() |
3 | 插入排序 | insertionSort() |
4 | 希尔排序 | shellSort() |
5 | 归并排序 | mergeSort() |
6 | 快速排序 | quickSort() |
7 | 堆排序 | heapSort() |
8 | 计数排序 | countingSort() |
二、详细步骤及代码实现
1. 冒泡排序
冒泡排序是一种简单的排序算法,重复地走访要排序的数列,比较相邻的元素,如果顺序错误就交换它们。
// 冒泡排序
public void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换arr[j]和arr[j+1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
2. 选择排序
选择排序是一种简单直观的排序算法,每一次从待排序的数据元素中选出最小的一个元素,放在序列的起始位置。
// 选择排序
public void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换arr[i]和arr[minIndex]
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
3. 插入排序
插入排序是一种简单直观的排序算法,在待排序序列中,将第一个元素视为有序序列,然后将后续元素逐个插入到有序序列中。
// 插入排序
public void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
4. 希尔排序
希尔排序是插入排序的一种高效率的改进版本,它通过将整个待排序序列分割成若干个子序列,分别进行插入排序,最后再对整个序列进行一次插入排序。
// 希尔排序
public void shellSort(int[] arr) {
int n = arr.length;
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j = i;
while (j >= gap && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
}
}
5. 归并排序
归并排序是一种分治算法,将待排序序列分为两部分,分别对这两部分进行排序,然后将排好序的部分合并。
// 归并排序
public void mergeSort(int[] arr) {
mergeSort(arr, 0, arr.length - 1);
}
private void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;