排序之快速排序的java语言简单实现

本文详细介绍了快速排序算法的基本原理及实现过程,并通过实例演示帮助读者理解其核心思想——分治法。文章还提供了具体的Java代码实现。

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

快速排序应该是排序算法里面经典里的经典了,在上两周美图手机的现场笔试中有一道编程题居然是现场默写排序算法(当然我那时全忘了,毕竟我平时最常用的排序算法是java里面的Arrays.sort())。
快速排序的原理也很简单,但是让你自己想的话比较难想,如果你初次接触到分治思想没准你还会觉得有点难懂,原理我也不多说。
概括来就是在分治的过程中,每次以最后一个元素为基准,两个index指向头端和尾端,然后前段index右移找寻比基准大的数,后端index左移找寻比基准小的数,都找到后就开始开始交换两个数,直到左右两个index相遇。这样一轮下来,在最后相遇的地点,左边的都是比基准小的数,毕竟比基准大的都换到右边去了,右边同理。然后把基准换到相遇的地点,然后分治思想对左边的细换。
一定要自己在纸上模拟!一定要自己在纸上模拟!一定要自己在纸上模拟!重要的事情说三遍。
接下来是代码实现:
    public static void kuaisu(int start, int end){
        if(end <= start) return;

        int pivot = partition(start, end);

        kuaisu(start, pivot - 1);
        kuaisu(pivot + 1, end);
    }
这个主要体现的就是分治思想啦,pivot变量代表的就是相遇的地点啦。
    private static int partition(int start, int end) {
        int i = start - 1, j = end;
        int number = array[end];
        while(true) {
            while(array[++i] < number);
            while(number < array[--j])
                if(j == i) break;
            if(i >= j) break;
            exchange(i, j);
        }
        exchange(i, end);
        return i;
    }
本算法的核心就是这个partition方法,记得用纸模拟哦,模拟两边就会了,我也不多说,说再多不如自己手写来的深刻。

总结:在快速排序中最重要的是理解partition这个思路和分治思想方法,如果都懂了其实快排自己也能写。(为什么我两周前的笔试没写出来?因为两周前的我根本没复习两年前教的东西。)有些同学可能把我的东西复制过去后会有点问题。嗯,自己也要动手写点东西啦,比如说要排序的数组我可是设为全局变量的哦,exchange函数也是一个很容易就实现的东西啦,就是交换数组中的两个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值