zoukankan      html  css  js  c++  java
  • 《数据结构与算法分析:C语言描述》复习——第六章“排序”——桶排序

    2014.06.17 06:22

    简介:

      桶排序是一种非比较排序,某些情况下其最好的复杂度可以达到O(n)。虽然并不常作为排序算法使用,但桶的思想却是哈希表的关键之一。

    描述:

      如果我们有k个桶,编号0~k - 1。那么我们用某种依据把数组里的n个元素分配到这k个桶中去。然后把每个桶单独排序。这k个桶必须满足一个条件——第i个桶比第i + 1个桶小。这些桶必须满足了某种顺序,才能让我们通过O(n)的时间把所有元素从桶里取出来拼到一起,得到一个排好序的数组。把元素分配到一个桶里的依据,就可以看作是哈希函数。对于桶内部的排序,可以使用其他的排序算法。虽然也可以递归继续用桶排序,但这种存在明显空间开销的算法,递归下去肯定不太好的。

    实现:

     1 // My implementation for radix sort.
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <vector>
     5 using namespace std;
     6 
     7 void bucketSort(vector<int> &v)
     8 {
     9     const int BUCKET_SIZE = 1000;
    10     const int BUCKET_NUM = 1000;
    11     vector<int> buckets[BUCKET_NUM];
    12     
    13     int n, i, j, k;
    14     
    15     n = (int)v.size();
    16     for (i = 0; i < n; ++i) {
    17         buckets[v[i] / BUCKET_SIZE % BUCKET_NUM].push_back(v[i]);
    18     }
    19     
    20     k = 0;
    21     for (i = 0; i < BUCKET_NUM; ++i) {
    22         if (buckets[i].size() > 1) {
    23             sort(buckets[i].begin(), buckets[i].end());
    24         }
    25         for (j = 0; j < (int)buckets[i].size(); ++j) {
    26             v[k++] = buckets[i][j];
    27         }
    28         buckets[i].clear();
    29     }
    30 }
    31 
    32 int main()
    33 {
    34     vector<int> v;
    35     int n, i;
    36     
    37     while (cin >> n && n > 0) {
    38         v.resize(n);
    39         for (i = 0; i < n; ++i) {
    40             cin >> v[i];
    41         }
    42         bucketSort(v);
    43         for (i = 0; i < n; ++i) {
    44             cout << v[i] << ' ';
    45         }
    46         cout << endl;
    47     }
    48     
    49     return 0;
    50 }
  • 相关阅读:
    使用Python从Workflowy同步大纲到印象笔记
    使用Jenkins自动部署博客
    使用有限状态机原理实现英文分词
    TeamFlowy——结合Teambition与Workflowy提高生产力
    技巧收集-M1709
    Tenacity——Exception Retry 从此无比简单
    记住 Python 变量类型的三种方式
    Python 装饰器装饰类中的方法
    技巧收集-W1701
    DotnetSpider爬虫简单示例 net core
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3792088.html
Copyright © 2011-2022 走看看