美文网首页
算法四:快速排序

算法四:快速排序

作者: 如风_dcac | 来源:发表于2020-08-23 23:46 被阅读0次

算法时间复杂度:o(nlogn);最差o(n2),即每次都是拿到最大或最小的数
算法稳定性:不稳定
思想:每次都取数组的第一个元素作为比较标准(哨兵元素),凡是大于这个哨兵元素的都放在它的右边,凡是小于这个哨兵元素的都放在它的左边
代码:

  public static void quicksort(int[] data,int left,int right){
        if(left<right){
            // 找到基准所在位置 且基准左边的数字都小于基准,基准小于右边的所有数字
            int index=getIndex(data,left,right);
            // 对基准左边的数据排序
            quicksort(data,0,index-1);
            // 对基准右边的数据排序
            quicksort(data,index+1,right);
        }



    }
    /**
     * 0到left,left+1 到right
     * @param data
     * @param left
     * @param right
     */
    public static int getIndex(int[] data,int left,int right){
        int base=data[left];
        while (left <right){
            // 从右往左找,一直找到小于基准到为止
            while (left <right && data[right] >base){
                right--;
            }
            //右边小于基准的,把小于基准的数,赋值给left所在的位置
            data[left]=data[right];
            while (left<right && data[left] <base){
                left++;
            }
            //左边大于基准的,把大于基准的数,赋值给right所在的位置
            data[right]=data[left];
            
       }
        data[left]=base;
        System.out.println("finalleft:"+left+"right"+right+"data:"+Arrays.toString(data));
        return left;
    }

public static void main(String[] args) {
        int[] data=new int[]{3,2,4,1,5,0};
        quicksort(data,0,data.length-1);
    }

相关文章

网友评论

      本文标题:算法四:快速排序

      本文链接:https://www.haomeiwen.com/subject/paoejktx.html