教你如何实现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;