zoukankan      html  css  js  c++  java
  • 桶排序

    1. 定义:
          桶排序(Bucket Sort)的基本思想是:将输入数据均匀地分配到有限数量的桶中,然后对每个桶再分别进行内部排序,最后按顺序将每个桶中的数据有序的组合起来。
     
    2. C++程序:
    #include <iostream>
    #include <vector>
    using namespace std;
    
    typedef struct node
    {
        int data;
        node *next;    
    }Node;
    
    int hashIndex(int val)
    {
        return val/10;
    }
    
    vector<int> BucketSort(vector<int> array, int bucketsize)
    {
        int len = array.size();
        vector<node *> bucket;
        bucket.reserve(bucketsize);
        /*初始化带头节点*/
        for(int i=0; i<bucketsize; ++i)
        {
            bucket[i] = new node;
            bucket[i]->next = NULL;
        }    
        /*将所有元素入桶并在桶内排序*/
        for(int i=0; i<len; ++i)
        {
            int index = hashIndex(array[i]);
            node *newnode = new node;
            newnode->data = array[i];
            newnode->next = NULL;
            node *p = bucket[index];
            if(p->next == NULL)
                p->next = newnode;
            else
            {
                while(p->next!=NULL && p->next->data <= newnode->data)
                    p = p->next;
                newnode->next = p->next;
                p->next = newnode;
            }
        }
        /*合并N个桶*/
        int num = 0;
        vector<int> res;
        for(int i=0; i<bucketsize; ++i)
        {
            node *p = bucket[i]->next;
            while(p != NULL)
            {
                num++;
                res.push_back(p->data);
                p = p->next;    
            }    
        }
        /*释放所有节点资源*/
        for(int i=0; i<bucketsize; ++i)
        {
            node *p = bucket[i];
            while(p!=NULL)
            {
                node *tmp = p;
                p = p->next;
                delete tmp;     
            }
        }
        return res;
    }
    
    int main()
    {
        cout<<"<======================Before Sort=======================>"<<endl;
        vector<int> vi= {15, 90, 25, 76, 47, 58, 32, 67, 84, 26, 12, 3, 9, 56,  
                98, 51, 79, 47, 39, 67 };
       for(auto &i :vi)
            cout<<i<<" ";
        cout<<endl;
        vector<int> res = BucketSort(vi,10);
        cout<<"<======================After Sort=======================>"<<endl;
        for(auto &i:res)
            cout<<i<<" ";
        cout<<endl;
        return 0;
    }
    运行结果如下:
  • 相关阅读:
    SenCha Touch AJAX跨域
    MS SQL 索引分析
    Tomcat性能优化(二) 启动参数设置
    PLSQL 连接不上64位ORACLE数据库解决办法
    PLSQL 配置连接ORACLE数据库
    Mybatis Batch 批量操作
    [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?
    [No000000]常用软件测试编译环境声明
    [No000013]在Office中关闭自动拼写检查和自动语法检查
    [No000012]编程中浮点数之什么是科学计数法
  • 原文地址:https://www.cnblogs.com/ladawn/p/8467944.html
Copyright © 2011-2022 走看看