Java 编程实现常见的排序算法

在Java编程中,实现常见的排序算法是一项基础而重要的任务。排序算法是计算机科学中的经典问题之一,涉及将一组元素按照某个顺序进行排列。Java提供了一种非常灵活的编程环境,可以用来实现各种排序算法。

冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法,它重复地遍历待排序数组,比较相邻的两个元素,如果它们的顺序不对,则交换它们。这个过程持续进行,直到整个数组都是有序的。

public class BubbleSort {
    public static void bubbleSort(int[] array) {
        int n = array.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    // 交换array[j]和array[j+1]
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(array);
        System.out.println("Sorted array: " + Arrays.toString(array));
    }
}

选择排序(Selection Sort)

选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找最小(或最大)元素,依次类推。

public class SelectionSort {
    public static void selectionSort(int[] array) {
        int n = array.length;
        for (int i = 0; i < n - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < n; j++) {
                if (array[j] < array[minIndex]) {
                    minIndex = j;
                }
            }
            // 交换array[i]和array[minIndex]
            int temp = array[i];
            array[i] = array[minIndex];
            array[minIndex] = temp;
        }
    }

    public static void main(String[] args) {
        int[] array = {64, 25, 12, 22, 11};
        selectionSort(array);
        System.out.println("Sorted array: " + Arrays.toString(array));
    }
}

插入排序(Insertion Sort)

插入排序是一种简单直观的排序算法,它的工作原理是将一个元素插入到已排序好的数组中。插入排序从第一个元素开始,认为第一个元素是已排序的,然后将下一个元素插入到已排序的数组中,直到所有元素都被插入到合适的位置。

public class InsertionSort {
    public static void insertionSort(int[] array) {
        int n = array.length;
        for (int i = 1; i < n; i++) {
            int key = array[i];
            int j = i - 1;

            // 将array[0..i-1]中大于key的元素往后移动
            while (j >= 0 && array[j] > key) {
                array[j + 1] = array[j];
                j = j - 1;
            }

            // 将key插入到正确的位置
            array[j + 1] = key;
        }
    }

    public static void main(String[] args) {
        int[] array = {12, 11, 13, 5, 6};
        insertionSort(array);
        System.out.println("Sorted array: " + Arrays.toString(array));
    }
}

归并排序(Merge Sort)

归并排序是一种分治算法,它将一个数组分成两个子数组,分别对子数组进行排序,然后合并这两个子数组以得到最终的有序数组。

import java.util.Arrays;

public class MergeSort {
    public static void merge(int[] array, int left, int middle, int right) {
        int n1 = middle - left + 1;
        int n2 = right - middle;

        // 创建临时数组
        int[] leftArray = new int[n1];
        int[] rightArray = new int[n2];

        // 将数据复制到临时数组 leftArray[] 和 rightArray[]
        for (int i = 0; i < n1; ++i)
            leftArray[i] = array[left + i];
        for (int j = 0; j < n2; ++j)
            rightArray[j] = array[middle + 1 + j];

        // 归并临时数组到 array[left..right]
        int i = 0, j = 0;
        int k = left;
        while (i < n1 && j < n2) {
            if (leftArray[i] <= rightArray[j]) {
                array[k] = leftArray[i];
                i++;
            } else {
                array[k] = rightArray[j];
                j++;
            }
            k++;
        }

        // 复制剩余的元素
        while (i < n1) {
            array[k] = leftArray[i];
            i++;
            k++;
        }

        while (j < n2) {
            array[k] = rightArray[j];
            j++;
            k++;
        }
    }

    public static void mergeSort(int[] array, int left, int right) {
        if (left < right) {
            // 找出中间点
            int middle = left + (right - left) / 2;

            // 对左侧和右侧进行递归排序
            mergeSort(array, left, middle);
            mergeSort(array, middle + 1, right);

            // 合并已排序的子数组
            merge(array, left, middle, right);
        }
    }

    public static void main(String[] args) {
        int[] array = {12, 11, 13, 5, 6, 7};
        int n = array.length;

        System.out.println("Original array: " + Arrays.toString(array));

        mergeSort(array, 0, n - 1);

        System.out.println("Sorted array: " + Arrays.toString(array));
    }
}

快速排序(Quick Sort)

快速排序是一种分治算法,它选择一个元素作为基准,将数组分成两个子数组,小于基准的放在左边,大于基准的放在右边,然后递归地对子数组进行排序。

import java.util.Arrays;

public class QuickSort {
    public static int partition(int[] array, int low, int high) {
        int pivot = array[high];
        int i = low - 1;

        for (int j = low; j < high; j++) {
            if (array[j] <= pivot) {
                i++;

                // 交换 array[i] 和 array[j]
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }

        // 交换 array[i+1] 和 array[high]
        int temp = array[i + 1];
        array[i + 1] = array[high];
        array[high] = temp;

        return i + 1;
    }

    public static void quickSort(int[] array, int low, int high) {
        if (low < high) {
            // 获取分区点
            int partitionIndex = partition(array, low, high);

            // 对左右子数组进行递归排序
            quickSort(array, low, partitionIndex - 1);
            quickSort(array, partitionIndex + 1, high);
        }
    }

    public static void main(String[] args) {
        int[] array = {12, 11, 13, 5, 6, 7};
        int n = array.length;

        System.out.println("Original array: " + Arrays.toString(array));

        quickSort(array, 0, n - 1);

        System.out.println("Sorted array: " + Arrays.toString(array));
    }
}

以上是几种常见的排序算法的Java实现。每种排序算法都有其特定的应用场景和性能特点。在实际应用中,根据数据规模和特点选择合适的排序算法是很重要的。这些排序算法的实现可以作为学习算法和数据结构的起点,理解它们的原理有助于提高编程技能和解决实际问题。

猜你喜欢

转载自blog.csdn.net/Itmastergo/article/details/135285193