Java快速排序

本文详细介绍了一种高效的排序算法——快速排序。快速排序的基本思想是选取一个基准值,并将数组分为两部分,一部分的所有元素均小于基准值,另一部分的所有元素均大于基准值。通过递归的方式,最终实现整个数组的有序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 快速排序
 * 原理:
 * 选择一个值作为基准(一般第一个元素)。比基准值小的都放在左边,大的都放在右边
 * 一次循环:
 * 从后向前比较,用基准值和最后一个值比较,如果比基准值小的和a[start]交换位置,
 * 若不小于跳过继续。找到这个值后又从前往后开始比较,如果比基准值大,和a[end]交换位置,
 * 如果不大于跳过。
 * 这样一次排序下来比基准值小的都在左边,大的都在右边
 *
 */
public class QucikSort {
    public static void main(String[] args){
        int a[] = {2,1,3,5,4,6};
        sort(a,0,a.length - 1);
        for(int i = 0;i < a.length - 1;i++){
            System.out.println(a[i] + " ");
        }

    }

    public static int[] sort(int a[],int low, int high){
        int start = low;
        int end = high;
        int key = a[low];

        while(end > start){
            //从后往前比较,若没有比基准元素小的则继续往前走
            while(end > start && a[end] >= key){
                end --;
            }
            if(a[end] < key){
                int temp = a[end];
                a[end] = key;
                a[start] = temp;
            }
            //从前往后执行若小于基准元素直接跳过
            while(end > start && a[start] <= key){
                start ++;
            }
            if(a[start] > key){
                int temp = a[start];
                a[start] = a[end];
                a[end] = temp;
            }
        }

        if(start > low){
            sort(a,low,start - 1);
        }
        if(end < high){
            sort(a,end+1,high);
        }
        return a;
    }
}

package sort;

public class QuickSortReduce {

    public static void main(String[] args) {
        int[] a = {1, 2,2,3, 2, 5, 4, 8};
        quickSort(a, 0, a.length - 1);
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }

    public static void quickSort(int[] parm, int start, int end) {

        if (start > end) {
            return;
        }
        int i = start;
        int j = end;
        int povit = parm[start];
      // 注意两个while不能调换
        while (i < j) {
            while (i < j && povit <= parm[j]) {
                // 从右往左
                j--;
            }
            while (i < j && povit >= parm[i]) {
                // 从左往右
                i++;
            }

            if (i < j) {
                int temp = parm[j];
                parm[j] = parm[i];
                parm[i] = temp;
            }
        }
        parm[start] = parm[i];
        parm[i] = povit;
        quickSort(parm, start, j - 1);
        quickSort(parm, j + 1, end);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值