快速排序java版

快速排序的关键在于要在数组中选择一个数作为一个标志位,然后通过和这个标志位的比较,来把数组分成两部分,一部分比这个标志位的值小,另一部分比这个标志位的值大,再之后继续同样的操作来对两个部分进行排序,直到最后剩下一个数,我们可以写出这些步骤的具体实现,再利用递归来将每次排序完成。笔者今天看到一段视频,很形象也很有趣的将快速排序向我们展示出来:

http://url.cn/5RgeoYV
接下来我们来用代码实现快速排序:

public class QuickSort {
    public static void main(String[] args) {
        int arr[]={5,6,1,2,8,3,4,9,7};
        quicksort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    private static int getbase(int[] arr, int fir, int end) {
        int temp=arr[fir];
        while (fir<end){
            //当end位置的值大于temp时,end向前移动一位
            while (fir<end&&arr[end]>=temp){
                end--;
            }
            arr[fir]=arr[end];
            while (fir<end&&arr[fir]<=temp){
                fir++;
            }
            arr[end]=arr[fir];
        }
        //将最后的标志位赋给fir,这样一次排完之后fir两端分成大于和小于fir的两部分
        arr[fir]=temp;
        return fir;
    }
		//递归求之
  private static void quicksort(int[] arr, int fir, int end) {
        //设定退出循环条件
        if (fir<end){
            int base=getbase(arr,fir,end);
                quicksort(arr,fir,base-1);
                quicksort(arr,base+1,end);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值