应为渐远 2020-09-23 01:20 采纳率: 0%
浏览 109

牛客网做的快排练习题,说我31行代码数组越界,这个哪里越界的啊大哥们

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
说这一行代码数组越界int mid = partition(a,left,right);

case通过率为0.00%
Exception in thread "main" java.lang.StackOverflowError
at Finder.quickSort(Finder.java:31)

import java.util.*;

public class Finder {

    //交换方法
    public void swap(int []a,int l,int r){                 
        int temp;
        temp = a[r];
        a[r] = a[l];
        a[l] = temp;
    }

    //一次快排
    public int partition (int []a, int left ,int right){
        while(left<right){
            while(left<right&&a[right]>a[left]){
                right--;
            }
            if(left<right)
                swap(a,left,right);
            while(left<right&&a[left]<a[right]){
                left++;
            }
            if(left<right)
                swap(a,left,right);
        }
        return left;
    }
    //快排算法
    public void quickSort(int[]a ,int left, int right ){
        int mid = partition(a,left,right);
        quickSort(a,left,mid-1);
        quickSort(a,mid+1,right);
    }
    public int findKth(int[] a, int n, int K) {
        // write code here
        quickSort(a,0,n-1);
        return a[K-1];

        }
    }
  • 写回答

2条回答 默认 最新

  • jingluan666 2020-09-23 09:01
    关注

    quickSort自身递归调用了,无法退出,相当于死循环

    评论

报告相同问题?

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大