java中的快速排序

快速排序优点:相对于冒泡排序、选择排序、插入排序,在处理数据较多的情况下,更加省时、迅速

快速排序原理(以数组、升序为例):创建一个方法,升序排序数组

选择数组第一个数为临界值A,再从数组最后一位开始往左找,依次寻找,找到第一个比临界值小的。如果没有找到比临界值小的,那么临界值A最小,位置确定在数组第一位,该数字的右边都是比他大的数字,再调用方法,将该数组中剩余的数字进行排序。如果找到了比临界值小的数B,那么再从临界值的位置开始往右找,找到第一个比临界值大的数,如果直到找到了B的位置,也没找到比A大的数,A的位置确定,那么A与B互换位置,那么临界值与上述找到的最小值换换位置;如果找到了比A大的数C,那么将B与C互换位置,在继续从C的位置往左找下一个比A小的数,在从B的位置往右找下一个比A大的数,最终会确定A的位置,A的左边都是比它小的数,右边都是比它大的数,以A的位置为分隔,数组分成两个部分,在分别调用方法对着两个部分排序。

集体实现代码如下:

import java.util.Arrays;
public class QuickSort {
    //快速排序,相对于冒泡排序,更加省时、迅速。
    public void sort(int[] array,int left,int right){
        int l,r; //用于储存左右索引的值
        //left为数组array左边的索引值,其对应的值为临界值,right为数组右边的索引值
        if(left>right){return;}
        l=left;
        r=right;
        while(l<r){
            while(array[left]<=array[r]&&l<r){r--;}//从右边开始往左找到一个比临界值小的数,否则r自减
            while(array[left]>=array[l]&&l<r){l++;}//从左边开始往右找到一个比临界值小的数,否则l自加
            if(r>l){
                int temp01=array[r];
                array[r]=array[l];
                array[l]=temp01;
            }else if(r==left){break;}
            else{
                int temp02=array[l];
                array[l]=array[left];
                array[left]=temp02;
            }
        }
        sort(array,left,l-1);//左边部分
        sort(array,l+1,right);//右边部分
    }

    public static void main(String[] args) {
        //创建对象
        QuickSort q=new QuickSort();
        //静态创建数组
        int[] array={23,16,18,19,54,16,10,47,28,1,9,85,9};
        System.out.println("原始数组:"+Arrays.toString(array));
        //利用对象调用排序方法
        q.sort(array,0,array.length-1);
        System.out.println("排序后数组:"+Arrays.toString(array));
    }
}

执行结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值