zoukankan      html  css  js  c++  java
  • 如何在很大数量级的数据中(比如1个亿)筛选出前10万个最小值?之六

    小结一下:

    对这个问题,到目前,我们得到了两段比较好的代码:堆选择与快速选择。

    堆选择,是我根据维基百科/堆排序/C++代码,改写得。

    快速选择,为ExcelHome的知名网友香川群子所写。她并指出,该代码去掉提前退出的条件,即为快速排序。即:

    void SortQuick(int data[], int Low, int High)
    {
      int low= Low,   high= High;
      for(int key= data[(Low+High)/2]; low< high; )
      {
        for( ; low< High && key> data[low]; ) low++;
        for( ; Low< high && key< data[high]; ) high--;
        if(low<= high) swap(data[low], data[high]), add+= low==high, low++, high--;
      }
      if(low< High) SortQuick(data, low,  High);
      if(Low< high) SortQuick(data, Low, high);
    }
    

      应该加个对外的函数接口:

    void QuickSort(int data[], int m)
    {
      SortQuick(data, 0, m-1);
    }
    

      快速选择,本质是将数据分成两组。因此,这里称它为分组方式。简称分组。

    那么,这两个好的代码之间来比较。会是怎么样一个结果呢?

    我做了一下。当选择为百选一,两者速度相当。堆略快。千选一,堆快。十选一,分组快。

    前面这些代码,尤其是这两段好代码。为我们处理更大数据量。打下了一个基础。

    这个总结,也算为之后的工作,作一个广告。

  • 相关阅读:
    性能测试用例设计
    jmeter压测
    jmeter
    fiddle--APP弱网测试
    性能测试流程
    性能测试--响应时间
    性能测试--吞吐量
    性能测试--最佳/最大用户数,举个栗子
    性能测试--并发用户
    QT中QMainWindow、QWidget、QDialog
  • 原文地址:https://www.cnblogs.com/oldtab/p/4449486.html
Copyright © 2011-2022 走看看