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

使用Java函数实现排序算法(快速排序、归并排序等)

发布时间:2023-07-06 11:23:19

排序算法是计算机科学中非常基础而重要的算法之一,它的作用是将一组无序的数据按照某个特定的顺序进行排列。常见的排序算法有快速排序、归并排序、冒泡排序等。在Java中,我们可以使用函数来实现这些排序算法。

1. 快速排序(quick sort)是一种分治法的排序算法,它的基本思想是通过一轮的排序将数组按照一个基准数分成两部分,一部分小于等于基准数,一部分大于基准数,然后再对这两部分分别进行快速排序。

public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(arr, low, high); // 划分数组
            quickSort(arr, low, pivotIndex - 1); // 对左子数组进行快速排序
            quickSort(arr, pivotIndex + 1, high); // 对右子数组进行快速排序
        }
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[low]; // 使用      个元素作为基准数
        while (low < high) {
            while (low < high && arr[high] >= pivot) {
                high--;
            }
            arr[low] = arr[high]; // 将小于基准数的元素移到低端

            while (low < high && arr[low] <= pivot) {
                low++;
            }
            arr[high] = arr[low]; // 将大于基准数的元素移到高端
        }
        arr[low] = pivot; // 将基准数放入最终位置
        return low; // 返回基准数的位置
    }
}

2. 归并排序(merge sort)是一种分治法的排序算法,它的基本思想是将数组分成两个子数组,分别进行排序,然后再将两个已排序的子数组合并成一个有序的数组。

public class MergeSort {
    public static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {
            int mid = (left + right) / 2; // 找到数组的中间位置
            mergeSort(arr, left, mid); // 对左边子数组进行归并排序
            mergeSort(arr, mid + 1, right); // 对右边子数组进行归并排序
            merge(arr, left, mid, right); // 合并两个已排序的子数组
        }
    }

    private static void merge(int[] arr, int left, int mid, int right) {
        int[] temp = new int[right - left + 1]; // 创建一个临时数组,用于存放排序后的结果
        int i = left; // 左子数组的起始位置
        int j = mid + 1; // 右子数组的起始位置
        int k = 0; // 临时数组的起始位置

        while (i <= mid && j <= right) {
            if (arr[i] <= arr[j]) {
                temp[k++] = arr[i++]; // 从左子数组中取较小的元素放入临时数组
            } else {
                temp[k++] = arr[j++]; // 从右子数组中取较小的元素放入临时数组
            }
        }

        while (i <= mid) {
            temp[k++] = arr[i++]; // 将左子数组中剩余的元素放入临时数组
        }

        while (j <= right) {
            temp[k++] = arr[j++]; // 将右子数组中剩余的元素放入临时数组
        }

        for (int m = 0; m < temp.length; m++) {
            arr[left + m] = temp[m]; // 将临时数组中的元素拷贝回原数组
        }
    }
}

以上是使用Java函数实现快速排序和归并排序的代码。这两个排序算法分别可以通过调用 quickSortmergeSort 函数来实现。排序的过程是通过递归的方式不断地对子数组进行排序,最终得到整个数组的有序序列。使用这些排序函数可以对一个整型数组进行排序,从而使得数组中的元素按照递增或递减的顺序排列。