美文网首页
求无序数组第k大数

求无序数组第k大数

作者: GGatsby | 来源:发表于2019-07-15 19:39 被阅读0次

思路:转化为排序就可迎刃而解,排序中比较推荐的是快速排序,速度快,在快排时,每一次确定一个元素位置后比较当前index与k,如果相等直接返回,如果index大于k,则元素位于当前元素后面,再调用自身即可,index小于k与之同理

代码如下:

function findk(arr, k) {
    let i = 0;
    let j = arr.length-1;
    let temp = arr[0];

    while(i<j) {
        while (i<j && arr[j] >= temp) {
            j--;
        }

        arr[i] = arr[j];
        i += 1;

        while(i<j && arr[i] <= temp) {
            i++;
        }

        arr[j] = arr[i];
        j -= 1;
    }

    arr[i] = temp;

    if(i == k-1) {
        return arr[i];
    }

    if(i > k-1) {
        return findk(arr.slice(0, i), k);
    }

    if(i < k-1) {
        return findk(arr.slice(i+1, arr.length), k-1-i);
    }
}

var arr = [10, 20, 5, 4, 201, 8, 32, 89, 21];

findk(arr, 4)

相关文章

网友评论

      本文标题:求无序数组第k大数

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