快速排序Java实现

  面试遇到手写个快速排序,只知道原理,没手动写过0 0!,现手写下,增加点记忆。

  原理基本就是:找一个基准,然后将比它大的放右边,比它小的放左边。然后在左右的范围内重新按照前面的方法执行,直到全部执行完。

  实现方法:参照《坐在马桶上看算法:快速排序》

      具体实现如下:(若有不对之处,欢迎指出,共同进步)

  

    public int partition(int[] arr,int left,int right){
        //选择第一个数为标准
        int flag = arr[left-1];
        int i = left-1;
        //j从右往左进行比较
        for(int j = right-1; j >= left-1 ;j--){    
            //根据j下标找到比标准小的数
            if(arr[j] < flag){
                //i只要没有遇到j就往右找
                //当找到数,就和j的下标的数进行交换
                while(arr[i] <= flag && i < j){
                    i++;    
                }
                int tmp = arr[j];
                arr[j] = arr[i];
                arr[i] = tmp;
            }
            //i遇到j,表明此次循环已执行完,当前数和标准进行交换
            if(i == j){
                arr[left-1] = arr[i];
                arr[i] = flag;
                break;
            }
        }
        return i+1;
    }
    public void quickSort(int[] arr,int left,int right){
        if(left < right){            
            int dp = partition(arr,left,right);
            quickSort(arr,left, dp-1);
            quickSort(arr,dp+1, right);
        }
    }

猜你喜欢

转载自www.cnblogs.com/tonhoa/p/9050520.html