java 快排

package package1;

import java.util.Arrays;
import java.util.Random;

public class T1 {
    public static void quickSort(int[] n) {
        System.out.println(Arrays.toString(n));
        int[] m = Arrays.copyOf(n, 10);
        quickSortUtil(n, 0, n.length - 1);
        System.out.println(Arrays.toString(n));
        Arrays.sort(m);
        System.out.println(Arrays.toString(m));
        System.out.println(Arrays.equals(m, n));
    }

    private static void quickSortUtil(int[] n, int q, int p) {
        if (q >= p)
            return;
        int m = n[q], i = q, j = p;
        while (i < j) {
            while (i < j && n[j] >= m)
                j--;
            n[i] = n[j];
            while (i < j && n[i] < m)
                i++;
            n[j] = n[i];
        }
        n[j] = m;
        quickSortUtil(n, q, j - 1);
        quickSortUtil(n, j + 1, p);
    }

    public static void main(String[] args) {
        Random random = new Random();
        int[] nn = {91, 96, 1, 48, 0, 4, 95, 56, 43, 90};
        int[] n = new int[10];
        for (int j = 0; j < 10; j++) {
            for (int i = 0; i < 10; i++) {
                n[i] = random.nextInt(100);
            }
            quickSort(n);
            System.out.println();
        }
    }
}
### Java 实现快速排序算法 #### 快速排序简介 快速排序是一种高效的排序算法,采用分治法策略。该算法通过选择一个“基准”元素将数组划分为两个子数组,其中一个子数组中的所有元素都比另一个子数组中的所有元素要小。接着递归地对这两个子数组进行相同的操作。 #### 示例代码及其解释 下面是一个完整的Java实现快速排序的例子: ```java public class QuickSort { public static void main(String[] args) { int[] array = {10, 7, 8, 9, 1, 5}; quickSort(array, 0, array.length - 1); System.out.println("Sorted array:"); for (int num : array) { System.out.print(num + " "); } } /** * 调用快速排序方法 */ public static void quickSort(int[] arr, int low, int high) { if (low < high) { /* pi 是分区索引,arr[pi] 已经排好序 */ int pi = partition(arr, low, high); // 单独处理左边部分 quickSort(arr, low, pi - 1); // 单独处理右边部分 quickSort(arr, pi + 1, high); } } /** * 此函数用于找到并返回枢纽位置 */ private static int partition(int[] arr, int low, int high) { int pivot = arr[high]; // 基准元素设为最后一个元素 int i = (low - 1); // 较小元素的索引 for (int j = low; j < high; j++) { // 如果当前元素小于或等于pivot if (arr[j] <= pivot) { i++; // 交换arr[i] 和 arr[j] int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 交换arr[i+1] 和 arr[high] (或pivot) int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } } ``` 上述程序展示了如何定义`quickSort()`以及辅助性的`partition()`函数来完成整个过程[^1]。当调用`quickSort(array, 0, array.length - 1)`时,即开始了对外部输入数据集的实际排序工作[^2]。 为了提高效率,在某些情况下可以考虑对原始版本做进一步改进,比如引入尾递归优化技术减少不必要的内存消耗[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值