美文网首页程序员
快排和利用快排思想查找数组第K大的数

快排和利用快排思想查找数组第K大的数

作者: 环球探测 | 来源:发表于2016-03-29 21:40 被阅读796次

问题:利用快排思想查找一个数组中第K大的数。

思路:快排中递归调用一个返回第一个数字把数组分成两部分之后的一个下标,这个下标就表示了这第一个数字在排序后的位置,我们通过将它与K对比,可以每次只选择选两部分之一进行递归查询。

此处利用快排的分治思想查找第K大的数的时候没有去重,
比如
1、2、3、3、5
第2大和第3大的都是3,第4大的才是2.

Java 代码:
Java
/** * Created with IntelliJ IDEA.

  • User: hqtc

  • Date: 16-3-22

  • Time: 下午9:52

  • To change this template use File | Settings | File Templates.
    */
    public class QuickSort{

    private int getSeparatorIndex(int[] nums, int low, int high) {
    int k = nums[low];
    while (low < high) {
    while (k < nums[high] && low < high) {
    high--;
    }
    if (low < high)
    nums[low++] = nums[high];
    while (k > nums[low] && low < high) {
    low++;
    }
    if (low < high)
    nums[high--] = nums[low];
    }
    nums[low] = k;
    return low;
    }

    public void sort(int num[], int low, int high) {
    if (low < high) {
    int sepIndex = getSeparatorIndex(num, low, high);
    sort(num, low, sepIndex - 1);
    sort(num, sepIndex + 1, high);
    }
    }

    public int findKthMax(int arr[], int k, int left, int right) {
    int sepIndex = getSeparatorIndex(arr, left, right);
    if (k == arr.length - sepIndex) {
    return arr[sepIndex];
    } else {
    if (k > arr.length - sepIndex) {
    return findKthMax(arr, k, left, sepIndex - 1);
    } else {
    return findKthMax(arr, k, sepIndex + 1, right);
    }
    }
    }
    }

相关文章

  • 快排和利用快排思想查找数组第K大的数

    问题:利用快排思想查找一个数组中第K大的数。 思路:快排中递归调用一个返回第一个数字把数组分成两部分之后的一个下标...

  • 排序(下):如何用快排思想在 ○(n) 内查找第 k 大元素

    排序(下):如何用快排思想在 ○(n) 内查找第 k 大元素 快排核心思想就是 分治 和 分区,我们可以利用分区的...

  • 算法

    查找:二分查找 排序 快排基于快排思想解决的问题partition,第k大的数字 归并 几种排序算法的时间复杂度,...

  • Lua 快速排序

    快排 在一个数组中快速找出第K大的数

  • 215. Kth Largest Element in an A

    利用快排的思想求解数组中第K大的元素.类似二分查找的思路,需要注意的是,划分数组的时候,需要将左边改为大于pivot的值

  • TopK问题(快排变形/优先级队列)

    1.数组中第k大/前k大的元素(215-中) 示例: 思路: 法1:快排变形:类似传统快排,区别在于,我们每次进行...

  • 算法 -- 排序

    快排 原理 快排利用分治思想。快排的思想是这样的:如果要排序数组中下标从 p 到 r 之间的一组数据,我们选择 p...

  • 数组中第K大的数

    一、相关概念 二、题目 题目 一个未排序的数组中找第k大的数 思路 快排 代码 参考文献 数组中的第K个最大元素

  • 快排,递归,非递归,三向切分,去掉边界条件

    快排 快排的思想: 典型的分治,将数组分成两个子数组,并且分别对子数组排序,且子数组的排序也是分治。 快排和归并排...

  • 数组

    第K大的数 第K大的数1.快排:每次返回的是标准的index,当index=k-1时就返回,不是就遍历一边2.堆排...

网友评论

    本文标题:快排和利用快排思想查找数组第K大的数

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