欢迎访问宙启技术站
智能推送

Java实现经典排序算法

发布时间:2023-06-17 01:00:38

Java作为一门面向对象的编程语言,其语法简洁、易于学习、可读性强等特点,使其尤为适合实现各种算法。在各种经典排序算法中,Java也提供了丰富的API库,方便我们实现各种排序算法。本文将对常见的几种经典排序算法进行详细介绍。

一. 冒泡排序

冒泡排序是一种基础的排序算法,其思想是通过比较相邻两个元素的大小,将较大的元素往后移动。通过多次重复这个过程来实现整个数组的排序。

Java代码实现:

public static void bubbleSort(int[] nums) {

    int len = nums.length;

    for (int i = 0; i < len - 1; i++) {

        for (int j = 0; j < len - 1 - i; j++) {

            if (nums[j] > nums[j + 1]) {

                int temp = nums[j];

                nums[j] = nums[j + 1];

                nums[j + 1] = temp;

            }

        }

    }

}

二. 选择排序

选择排序是一种简单的排序算法,其思想是依次选择数组中的最小值,放置于数组的起始位置,然后再在剩下的元素中选择最小值放置到数组的下一个位置。重复这个过程直到数组排序完成。

Java代码实现:

public static void selectionSort(int[] nums) {

    int len = nums.length;

    for (int i = 0; i < len - 1; i++) {

        int minIndex = i;

        for (int j = i + 1; j < len; j++) {

            if (nums[j] < nums[minIndex]) {

                minIndex = j;

            }

        }

        int temp = nums[i];

        nums[i] = nums[minIndex];

        nums[minIndex] = temp;

    }

}

三. 插入排序

插入排序是一种更有效的排序算法,其思想是依次将数组中的元素插入到已排序的部分中,以达到排序的目的。

Java代码实现:

public static void insertionSort(int[] nums) {

    int len = nums.length;

    for (int i = 1; i < len; i++) {

        int temp = nums[i];

        int j = i - 1;

        while (j >= 0 && nums[j] > temp) {

            nums[j + 1] = nums[j];

            j--;

        }

        nums[j + 1] = temp;

    }

}

四. 希尔排序

希尔排序介于插入排序和快速排序之间,其思想是将数组分成若干个子序列,进行插入排序,然后逐步缩小子序列的大小,最终完成排序。

Java代码实现:

public static void shellSort(int[] nums) {

    int len = nums.length;

    int gap = len / 2;

    while (gap > 0) {

        for (int i = gap; i < len; i++) {

            int temp = nums[i];

            int j = i;

            while (j >= gap && nums[j - gap] > temp) {

                nums[j] = nums[j - gap];

                j -= gap;

            }

            nums[j] = temp;

        }

        gap /= 2;

    }

}

五. 快速排序

快速排序是一种高效的排序算法,其思想是通过分治法来实现排序,将数组分成两个部分,一部分小于基准值,一部分大于基准值,然后递归处理这两部分,最终完成排序。

Java代码实现:

public static void quickSort(int[] nums, int left, int right) {

    if (left >= right) {

        return;

    }

    int i = left;

    int j = right;

    int pivot = nums[left + (right - left) / 2];

    while (i <= j) {

        while (nums[i] < pivot) {

            i++;

        }

        while (nums[j] > pivot) {

            j--;

        }

        if (i <= j) {

            int temp = nums[i];

            nums[i] = nums[j];

            nums[j] = temp;

            i++;

            j--;

        }

    }

    quickSort(nums, left, j);

    quickSort(nums, i, right);

}

六. 归并排序

归并排序是一种经典的排序算法,其思想是将数组分成两个部分,分别排序后再合并,以此达到排序的目的。

Java代码实现:

public static void mergeSort(int[] nums, int left, int right) {

    if (left >= right) {

        return;

    }

    int mid = left + (right - left) / 2;

    mergeSort(nums, left, mid);

    mergeSort(nums, mid + 1, right);

    int[] temp = new int[right - left + 1];

    int i = left, j = mid + 1, k = 0;

    while (i <= mid && j <= right) {

        if (nums[i] < nums[j]) {

            temp[k++] = nums[i++];

        } else {

            temp[k++] = nums[j++];

        }

    }

    while (i <= mid) {

        temp[k++] = nums[i++];

    }

    while (j <= right) {

        temp[k++] = nums[j++];

    }

    for (k = 0, i = left; i <= right; i++, k++) {

        nums[i] = temp[k];

    }

}

总结

以上就是常见的几种经典排序算法的Java实现。每种算法都有其独特的优点和适用场景,需要结合实际情况进行选择。同时,Java提供了丰富的API库,也可以通过自定义比较器等工具类来实现排序算法。