zoukankan      html  css  js  c++  java
  • Java快速排序

    package algorithm;
    
    import java.util.Arrays;
    
    public class QuickSort02 {
    //快速排序,从数组中选定一个值,将其他小于这个值的元素置于前,否则置于后,依此类推
        public static void main(String[] args) {
            int [] arr={98,1,5,71,46,-1,-67,789,15,64,39,71,46,1};
            quickSort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
        }
        public static void quickSort(int []arr,int left,int right){
            
            int l=left,r=right,mid=arr[(l+r)/2];
        /*  mid=(l+r)/2,arr[mid]  这里不能标记mid的索引,然后从数组中按索引取元素,因为在遍历循环的时候数组元素顺序是在变化的,
         * (l+r)/2处的元素会变化    ,所以应该直接将这个值取出来;
         */
            while(l<r){
                //找到左边第一个大于或等于arr[mid]的元素
                while(arr[l]<mid){
                    l+=1;
                }
                //找到右边倒数第一个小于或等于arr[mid]的元素
                while(arr[r]>mid){
                    r-=1;
                }
                //判断找到的左右元素是否在mid的两边
                if(l>=r) break;
                //确认在两边就开始进行交换
                int temp=0;
                temp=arr[l];
                arr[l]=arr[r];
                arr[r]=temp;
                //因为存在找到的交换元素是等于arr[mid]的情况,所以要进行处理
                if(arr[l]==mid) r-=1;
                if(arr[r]==mid)  l+=1;
            }
            //跳出循环的时候就是l==r;这个时候要处理,让他们交错而过,为递归做准备
            if(l==r) {
                l+=1;
                r-=1;
            }
            //开始递归
            //将第一次排序后的前后数组进行排序;
            if(left<r) quickSort(arr, left, r);
            if(l<right) quickSort(arr,l, right);
        }
    
    }
  • 相关阅读:
    springboot配置springbatch+mybatisplus对mybatis sqlsessionfactory的配置
    bytes的hex和fromhex函数
    python 锁 装饰器
    socket 客户端和服务端
    socket 客户端和服务端思考
    socket 发送类
    socket 服务端
    OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
    for循环执行顺序流程
    Chromedriver的安装教程
  • 原文地址:https://www.cnblogs.com/zwwang/p/13274600.html
Copyright © 2011-2022 走看看