码迷,mamicode.com
首页 > 编程语言 > 详细

9.桶排序

时间:2016-09-10 23:45:27      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

const int maxn = 100 + 2;
int num[maxn], n;

struct node
{
    node(){ next = NULL; num = -1; }
    node(int x, node *n):num(x), next(n) {}
    int num;
    node *next;
};

int bits(int x)
{
    int ret = 0;
    
    while(x >= 10)
    { ret++; x /= 10; }
    
    return ret + 1;
}

void Insert(node *n, int x)
{
    node *p = n;
    if(p->next == NULL)
    {
        p->next = new node(x, NULL);
        return ;
    }
            
    for(; p->next != NULL; p = p->next)
    {
        if(p->next->num > x)
        {
            p->next = new node(x, p->next);
            return ;
        }
    }
    p->next = new node(x, NULL);
}

void Bucket_sort(int *num, int n, int k)
{
    node *c = new node[10];
        
    for(int i = 0; i < n; i++)
        Insert(&c[num[i] / k], num[i]);

    int t = 0;
    for(int i = 0; i < 10; i++)
        for(node *p = c[i].next; p != NULL; p = p->next)
            num[t++] = p->num;
}

int main()
{
    cin >> n;
    int *k = &num[0];
    for(int i = 0; i < n; i++)
    {
        cin >> num[i];
        if(*k < num[i]) k = &num[i];
    }
    Bucket_sort(num, n, pow(10, bits(*k) - 1));
    
    for(int i = 1; i < n; i++)
        cout << num[i] << " ";
    cout << endl;
}

时间复杂度为O(n) ~ O(n^2), 嗯, 比较随缘的一种算法

我的这个版本只能排序正数,对数据分布均匀的情况比较适用

代码没有快排来的简洁, 只是学习用吧....

再有就当作练习链表了....

 

9.桶排序

标签:

原文地址:http://www.cnblogs.com/QQ-1615160629/p/5860494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!