快排分区函数

作者: freelamb | 来源:发表于2016-11-22 16:49 被阅读151次

快排分区函数

思路

并未真正的实现快速排序算法,只是找到了选中的数在数组中的顺序位置。

基本思想

选择一个数,把数组的数分为两部分,把比选中的数小或者相等的数移到数组的左边,把比选中的数大的数移动到数组的右边,返回分区后的选中数所在的下标。

对于获取数组中的前k个数,数组调用了分区函数之后:

  1. 如果返回的下标是k-1,那么数组左边的k个数(数组下标从0到k-1),就是k个最小的数;
  2. 如果返回的下标大于k,那么从下标之前的数组中再次调用查找;
  3. 如果返回的下标小于k,那么从下标开始之后的数组中再次调用查找。

效率

时间复杂度: o(n)
空间复杂度: o(1)

应用

  1. 一维数组的最小(或大)的k个数;
  2. 离直角坐标系原点最近的k个数;
  3. 广泛运用在排序和海量数据挑选当中。

代码实现

// C++
void Swap(int &first_number, int &second_number) {
    int temp        = first_number;
    first_number    = second_number;
    second_number   = temp;
}

int Partition(int array[], int start, int end, int pivot_index) {
    int pivot       = array[pivot_index];
    int store_index = start;

    Swap(array[pivot_index], array[end]);
    for (int iLoop = start; iLoop < end; iLoop++) {
        if (array[iLoop] < pivot) {
            Swap(array[iLoop], array[store_index]);
            store_index++;
        }
    }
    Swap(array[store_index], array[end]);

    return store_index;
}

相关文章

  • 快排分区函数

    快排分区函数 思路 并未真正的实现快速排序算法,只是找到了选中的数在数组中的顺序位置。 基本思想 选择一个数,把数...

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

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

  • Partition 快排核心函数

    快速排序介绍 快速排序是目前在实践中非常高效的一种排序算法,它不是稳定的排序算法,平均时间复杂度为O(nlogn)...

  • 快速排序

    快排的思想是递归,一次快排函数是使用的双指针。一次快排中,任选一个轴点,一次快排后,左边的元素比它小,右边的元素比...

  • 【Spark Java API】Transformation(1

    mapPartitions 官方文档描述: **mapPartitions函数会对每个分区依次调用分区函数处理,然...

  • QuickSort GoOver 2 多线程

    多线程下的快排: 每轮产生的新分区用新线程执行排序过程。 C#实现过程:

  • Sort函数

    目的:通过了解Sort函数的实现过程,复习学过的快排,堆排,插入排序。 Sort函数是C++自带的库函数。需要头文...

  • sort函数的使用

    sort排序又叫快速排序(快排)1、需要引入头文件 2、sort函数的引用 默认的sort函数是按升序排。sort...

  • LeetCode 力扣 86. 分隔链表

    题目描述(中等难度) 题目描述的很难理解,其实回想一下快排就很好理解了。就是快排的分区,将链表分成了两部分,一部分...

  • Spark的优化

    1.RDD重新分区 针对大量小分区的RDD,使用RDD重分区函数coalesce将小分区合并成大分区;同样当分区数...

网友评论

    本文标题:快排分区函数

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