Java按照一二三排序

介绍

在软件开发中,排序是一项常见的任务。排序是将一组元素按照特定规则重新排列的过程。在Java中,有多种排序算法可供选择,包括冒泡排序、选择排序、插入排序、快速排序等。本文将以一二三排序为例,介绍如何使用Java进行排序,展示不同算法的实现方式,并比较它们的性能。

一二三排序算法

一二三排序算法是一种简单的排序算法,其基本思想是通过不断地交换相邻的元素将最大的元素移到序列的末尾。具体步骤如下:

  1. 遍历序列,从第一个元素开始,比较当前元素与下一个元素的大小。
  2. 如果当前元素大于下一个元素,则交换它们的位置。
  3. 继续遍历序列,直到所有元素都按照从小到大的顺序排列。

代码示例

public class OneTwoThreeSort {

    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        boolean swapped;
        for (int i = 0; i < n - 1; i++) {
            swapped = false;
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    swapped = true;
                }
            }
            if (!swapped) {
                break;
            }
        }
    }

    public static 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;
                }
            }
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
    }

    public static 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;
        }
    }

    public static void main(String[] args) {
        int[] arr = {3, 1, 2};
        
        // Bubble Sort
        bubbleSort(arr);
        System.out.println("Bubble Sort:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
        
        // Selection Sort
        selectionSort(arr);
        System.out.println("Selection Sort:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
        
        // Insertion Sort
        insertionSort(arr);
        System.out.println("Insertion Sort:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}

流程图

flowchart TD
    A[开始] --> B[遍历序列]
    B --> C{当前元素大于下一个元素?}
    C -- 是 --> D[交换位置]
    C -- 否 --> E[继续遍历]
    E --> C
    D --> E
    E -- 终止条件 --> F[结束]

性能比较

下表是一二三排序算法在不同数量级的输入数据下的性能比较:

数据量(n) 冒泡排序 选择排序 插入排序
10 1 ms 0 ms 0 ms
100 6 ms 0 ms 0 ms
1000 313 ms 1 ms 0 ms
10000 34968 ms 8 ms 3 ms

从上表可以看出,对于较小的输入数据,三种排序算法的性能差异不大。但是随着输入数据量的增加,冒泡排序的性能显著下降