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

    假设有n个数组成一个数组a[n],a[n]的范围是0~m,现在需要对这个数组进行排序。

    桶排序的过程:我们准备一个数组b[m],初始化该数组为0。观察a[i]的值(0<=i<=n),比如说a[i]=x(显然0<x<m),则b[x]++,即利用b[x]存储a[n]中值为x的元素出现了几次。最后,我们按照0~m的顺序,依次输出b[x]次x,得到的序列就是排序结果。

    废话不多说,直接上代码:

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 //假设桶排序所排序的n个数分布在min~max之间
     6 void booksort(int* a,int n,int min,int max)
     7 {
     8     int* book=new int[max-min+1];
     9     memset(book,0,sizeof(int)*(max-min+1));
    10 
    11     for(int i=0;i<n;i++)
    12     {
    13         book[a[i]-min]++;
    14     }
    15 
    16     for(int i=0;i<(max-min+1);i++)
    17     {
    18         for(int j=0;j<book[i];j++)
    19         {
    20             cout<<i+min<<" ";
    21         }
    22     }
    23 }
    24 
    25 
    26 
    27 int main()  
    28 {  
    29     int str[10]={8,4,5,7,55,8,42,3,5,8};
    30 
    31     booksort(str,10,3,55);
    32 
    33     cout<<endl;
    34 
    35     return 0;
    36 }  

    桶排序是一种不稳定排序,其时间复杂度为O(N)+O(M*(N/M)*log(N/M))=O(N+N*(logN-logM))=O(N+N*logN-N*logM)。

  • 相关阅读:
    Js变量类型
    前端面试题HTML
    AP聚类
    锚点
    html
    Active Learning主动学习
    z-index
    position
    学习笔记_卷积神经网络
    学习笔记_深度学习的数学基础
  • 原文地址:https://www.cnblogs.com/jswu-ustc/p/8571980.html
Copyright © 2011-2022 走看看