小龙哥GT 2023-12-05 11:35 采纳率: 22.2%
浏览 2

纠错:Java随机快速排序

Java随机快速排序,代码能跑,但是结果不对。

import java.util.Random;

public class QuickSort {

    /* 快速排序函数 */
    public static void quickSort(int[] arr, int left, int right) {
        
        // 如果队首元素小于队尾元素
        if (left < right) {
            
            // 定义基准数,记录队列的始末。
            int pivot = arr[left + new Random().nextInt(right - left + 1)];
            int begin = left;
            int end = right;

            while (right > left) {

                // 当队尾元素小于基准数就将队尾插到队首
                if (arr[right] < pivot) {
                    arr[left] = arr[right];
                    left++; // 队首索引后移
                } 

                // 当队尾元素大于基准数就将队尾索引前移,继续从队尾比较
                else {
                    right--;
                    continue;
                }

                while (right > left) {
                    
                    // 当队首元素大于基准数就将队首插到队尾
                    if (arr[left] > pivot) {
                        arr[right] = arr[left];
                        right--;// 队尾索引前移
                        break;
                    }

                    // 当队首元素小于基准数就将队首索引后移,继续从队首比较
                    else {
                        left++;
                    }
                }
            }
            
            // 队首和队尾索引重合,就将基准数插入此位置
            arr[left] = pivot;
 
            quickSort(arr, begin, left - 1);
            quickSort(arr, left + 1, end);
        }
    }
    
    public static void main(String[] args) {
        int[] arr = {8, 45, 0, 30, 49, 16, 20, 20};
        
        // 定义队首、队尾位置的索引
        int left = 0;
        int right = arr.length - 1;
        
        System.out.print("排序前的数组:");
        for (int i : arr)
            System.out.print(i+" ");
        System.out.println();
        
        quickSort(arr, left, right);
        
        System.out.print("排序后的数组:");
        for (int i : arr)
            System.out.print(i+" ");
    }
}
  • 写回答

3条回答 默认 最新

  • 柯本 2023-12-05 11:47
    关注
    
    import java.util.Random;
    public class QuickSort {
      /* 快速排序函数 */
      public static void quickSort(int[] arr, int left, int right) {
        // 如果队首元素小于队尾元素
        if (left < right) {
          // 定义基准数,记录队列的始末。
          int pivot = arr[left]; //here 不用随机
          int begin = left;
          int end = right;
          while (right > left) {
            // 当队尾元素小于基准数就将队尾插到队首
            if (arr[right] < pivot) {
              arr[left] = arr[right];
              left++; // 队首索引后移
            }
            // 当队尾元素大于基准数就将队尾索引前移,继续从队尾比较
            else {
              right--;
              continue;
            }
            while (right > left) {
              // 当队首元素大于基准数就将队首插到队尾
              if (arr[left] > pivot) {
                arr[right] = arr[left];
                right--; // 队尾索引前移
                break;
              }
              // 当队首元素小于基准数就将队首索引后移,继续从队首比较
              else {
                left++;
              }
            }
          }
          // 队首和队尾索引重合,就将基准数插入此位置
          arr[left] = pivot;
          quickSort(arr, begin, left - 1);
          quickSort(arr, left + 1, end);
        }
      }
      public static void main(String[] args) {
        int[] arr = {8, 45, 0, 30, 49, 16, 20, 20};
       // int[] arr = {1,2,7,4,6,5,3};
        // 定义队首、队尾位置的索引
        int left = 0;
        int right = arr.length - 1;
        System.out.print("排序前的数组:");
        for (int i : arr)
          System.out.print(i + " ");
        System.out.println();
        quickSort(arr, left, right);
        System.out.print("排序后的数组:");
        for (int i : arr)
          System.out.print(i + " ");
      }
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月5日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题