基本算法——快速排序(左右指针法)

人走茶凉 提交于 2020-01-14 16:47:27

注:使用左右指针时,如果选择数组左边为标准点,则需要先移动右边指针

一、算法核心思想

         不断将一个数组中的数放在选取的标准数右边,比标准数的放在标准数左边(一般情况,当然你可以小的放左边大的放右边)

二、图解

       

 

 

 

 

 

三、代码

    /**
     * 快速排序 前后指针
     * 侧重注意,如果是以前面为标准key,需要先从最后开始移动指针
     */
    public static int[] quickSort2(int[] array, int low, int high){
        if(low < high){
            //此时设第一个数为key
            int key = array[low], i = low, j = high;
            while (i < j){
                //从右边开始移动指针
                //此时右边的值都大于key,不需要交换,继续指针向前移动
                while (i < j && array[j] >= key){
                    j--;
                }
                while (i < j && array[i] <= key){
                    i++;
                }
                if(i < j){
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
            //交换key和重合指针的值
            array[low] = array[i];
            array[i] = key;
            
            //递归
            quickSort2(array, low, i - 1);
            quickSort2(array, i + 1, high);
            return array;
        }
        return array;
    }

图是用画图画的,相当丑。以上为个人笔记 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!