java常用算法之快速排序详解

package com.kero99.ygc.quickSort;

public class QuickSort {
    /**
     * 快速排序 类似于冒泡排序 基于交换排序的思想 对冒泡排序进行改进 提高了执行效率
     * 设定一个分界值 将数组分为左右俩部分 大于等于分界值放到数组右边 小于的值放到数组左边
     * 左右两边数据可以独立排序 同样左边放较小的 右边放较大的  
     * @param arr
     * @param left
     * @param right
     */

    // private static final int SIZE = 18;
    public void quickSort(int[] arr,int left,int right){//快速排序算法 
        int f,t;
        int rtemp,ltemp;
        ltemp=left;
        rtemp=right;
        f=arr[(left+right)/2];//分界值   当前数组则为30
        while(ltemp<rtemp) //左边的值小于右边的 0 - 4
        {
            while(arr[ltemp]<f){//左边的小于分界值 下标++
                ++ltemp;        
            }
            while(arr[rtemp]>f){//右边的大于分界值 下标--
                --rtemp;
            }
            if(ltemp<=rtemp){
                t=arr[ltemp];
                arr[ltemp]=arr[rtemp];
                arr[rtemp]=t;
                --rtemp;
                ++ltemp;
            }
        }
        if(ltemp==rtemp){
            ltemp++;
        }
        if(left<rtemp){
            quickSort(arr,left,ltemp-1);
        }
        if(ltemp<right){
            quickSort(arr,rtemp+1,right);
        }
    }
    public static void main(String[] args) {
        int[] s={20,123,30,555,1000};
        QuickSort qs=new QuickSort();
        qs.quickSort(s, 0, s.length-1);
        for(int i=0;i<s.length;i++){
            System.out.println(s[i]);
        }
//      int[] shuzu=new int[SIZE];
//      int i;
//      for(i=0;i<SIZE;i++){
//          shuzu[i]=(int)(100+Math.random()*(100+1));
//      }
//      QuickSort qs=new QuickSort();
//      System.out.println("排序前");
//      for(i=0;i<SIZE;i++){
//          System.out.print(shuzu[i]+" ");
//      }
//      System.out.print("\n");
//      System.out.println("排序后");
//      qs.quickSort(shuzu,0,SIZE-1);
//      for(i=0;i<SIZE;i++){
//          System.out.print(shuzu[i]+" ");
//      }
//      System.out.print("\n");

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南归北隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值