Java实现快速排序算法

排序算法采用的是分而治之的方法,刚开始需要选择一个基准值,以这个基准值,把数组分成两部分,左边小于基准值的数组,右边大于基准值的数组(假设我们要实现从小到大的排列),然后在对左边序列选取基准值再把该序列一分为二,右边序列也一样,直到分到不能分为止,一直递归下去,就自然成为有序序列,快速排序的平均时间复杂度为nlog(n),但是也有缺点就是快速排序算法的稳定性不足,对于相同大小的值,因为两个值的位置不同而最后排序出来的序列不同,(可能先出现的排在前面,也可能排在后面),下面是Java实现的代码

public class sort_quick {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] data={6,3,7,4,1};
        new sort_quick().sort(data,0,4);
        for(int i=0;i<5;i++)
            System.out.println(data[i]);
    }
    public void sort(int[] data,int low,int hight){
    //运用三个中找一个合适的作为基准!
    //找基准的方法有三种,第一:就以第一个为基准
    //第二:随机
    //第三:找第一和中间和最后三个数之间的中间值
        if(low>hight)
            return;
        int mid = (low+hight)/2;
        if(data[hight]<data[mid]){
            int temp =data[hight];
            data[hight]=data[mid];
            data[mid]=temp;
        }
        if(data[hight]<data[low]){
            int temp =data[hight];
            data[hight]=data[low];
            data[low]=temp;
        }
        if(data[mid]>data[low]){
            int temp =data[mid];
            data[mid]=data[low];
            data[low]=temp;
         }
        int key=data[low];
       while(low<hight){
           while(low<hight&&data[hight]>key){
               hight--;
           }
           if(low<hight)data[low++]=data[hight];
           while(low<hight&&data[low]<key){
               low++;
           }
           if(low<hight)data[hight--]=data[low];
       }
       data[low]=key;
       sort(data,0, low-1);
       sort(data,low+1,hight);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值