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);
        }
    
    }
  • 相关阅读:
    常用JSR-303数据校验
    SpringBoot配置文件及自动配置原理
    SpringBoot自动装配原理
    Centos安装TensorFlow和Keras
    Batch梯度下降
    梯度下降法的注意点
    读取流量
    Linux开机启动服务
    Shell分割字符得到数组
    Linux下无图形界面安装Matlab
  • 原文地址:https://www.cnblogs.com/zwwang/p/13274600.html
Copyright © 2011-2022 走看看