实现递归快排的结果有问题

代码工厂 其他问答 1
package com.itheima.myBinarySearch;

public class Demo2 {
    public static void main(String[] args) {
//        先定义一个int类型的数组
        int[] arr = {3, 4, 1, 7, 14, 8, 9, 10};

//        定义一个快排的方法
        quitSort(arr, 0, arr.length - 1);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void quitSort(int[] arr, int left, int right) {
//        定义一个最左边的值、最右边的值、基本数
        int left0 = left;
        int right0 = right;
        int basenumber = arr[left0];

        while(left != right){
            while(arr[left] <= basenumber && left < right){
                left++;
            }
            while(arr[right] >= basenumber && right > left){
                right--;
            }
//            交换两个值
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
//        当左右两边指向同一个数的时候,基准数归位
        int same = arr[left];
        arr[left] = arr[left0];
        arr[left0] = same;


    }
}
打印结果:
4 1 3 7 14 8 9 10

作为基本数的3左边并不是都小于3的

回复

共1条回复 我来回复
  • 源码客栈网
    这个人很懒,什么都没有留下~
    评论

    给你参考一下正确的,望采纳

    public static void quickSort(float[] array,int low,int high)
        {
            if(low < high)
            {
                //获取基准点
                int middle = getMiddle(array,low,high);
                quickSort(array,low,middle-1);
                quickSort(array,middle+1,high);
            }
        }
    
        //对每个分部数组进行排序,并给出下一轮的数组切分点
        public static int getMiddle(float[] arr,int low,int high)
        {
            //数组的第一个数为基准元素
            float temp = arr[low];
            while(low < high)
            {
                while(low < high && arr[high] >= temp)
                {
                    high--; //从后向前找比基准小的数
                }
                //把比基准小的数移到低端
                arr[low] = arr[high];
                while(low < high && arr[low] <= temp)
                {
                    low++; //从前向后找比基准大的数
                }
                //把比基准大的数移到高端
                arr[high] = arr[low];
            }
            arr[low] = temp;
            return low;
        }
    
    0条评论

发表回复

登录后才能评论