桶排序程序

原创 2005年03月01日 23:19:00


#include <iostream.h>
#include <iomanip.h>

// constant size must be defined as the array size for bucketSort to work
const int SIZE = 12;

void bucketSort( int [] );
void distributeElements( int [], int [][ SIZE ], int );
void collectElements( int [], int [][ SIZE ] );
int numberOfDigits( int [], int );
void zeroBucket( int [][ SIZE ] );

int main()
{
   int array[ SIZE ] = { 19, 13, 5, 27, 1, 26, 31, 16, 2, 9, 11, 21 };

   cout << "Array elements in original order:/n";

   for ( int i = 0; i < SIZE; ++i )
      cout << setw( 3 ) << array[ i ];

   cout << '/n';
   bucketSort( array );

   cout << "/nArray elements in sorted order:/n";

   for ( int j = 0; j < SIZE; ++j )
      cout << setw( 3 ) << array[ j ];

   cout << endl;
   return 0;
}

// Perform the bucket sort algorithm
void bucketSort( int a[] )
{
   int totalDigits, bucket[ 10 ][ SIZE ] = { 0 };

   totalDigits = numberOfDigits( a, SIZE );

   for ( int i = 1; i <= totalDigits; ++i ) {
      distributeElements( a, bucket, i );
      collectElements( a, bucket );

      if ( i != totalDigits )
         zeroBucket( bucket );  // set all bucket contents to zero
   }
}

// Determine the number of digits in the largest number
int numberOfDigits( int b[], int arraySize )
{
   int largest = b[ 0 ], digits = 0;

   for ( int i = 1; i < arraySize; ++i )
      if ( b[ i ] > largest )
         largest = b[ i ];

   while ( largest != 0 ) {
      ++digits;
      largest /= 10;
   }

   return digits;
}

// Distribute elements into buckets based on specified digit
void distributeElements( int a[], int buckets[][ SIZE ], int digit )
{
   int divisor = 10, bucketNumber, elementNumber;

   for ( int i = 1; i < digit; ++i )   // determine the divisor
      divisor *= 10;                 // used to get specific digit

   for ( int k = 0; k < SIZE; ++k ) {
      // bucketNumber example for hundreds digit:
      // (1234 % 1000 - 1234 % 100) / 100 --> 2

      bucketNumber = ( a[ k ] % divisor - a[ k ] %
                     ( divisor / 10 ) ) / ( divisor / 10 );

      // retrieve value in buckets[bucketNumber][0] to determine
      // which element of the row to store a[i] in.

      elementNumber = ++buckets[ bucketNumber ][ 0 ];
      buckets[ bucketNumber ][ elementNumber ] = a[ k ];
   }
}

// Return elements to original array
void collectElements( int a[], int buckets[][ SIZE ])
{
   int subscript = 0;

   for ( int i = 0; i < 10; ++i )
      for ( int j = 1; j <= buckets[ i ][ 0 ]; ++j )
         a[ subscript++ ] = buckets[ i ][ j ];
}

// Set all buckets to zero
void zeroBucket( int buckets[][ SIZE ] )
{
   for ( int i = 0; i < 10; ++i )
      for ( int j = 0; j < SIZE; ++j )
         buckets[ i ][ j ] = 0;
}

  

Java实现桶排序

详细讲解见《算法导论》8.4节——桶排序。 Java代码如下: package linetimesort; import java.util.LinkedList; import sort.Ins...
  • l294265421
  • l294265421
  • 2015年05月19日 19:24
  • 2234

桶排序_BUCKETSORT

桶排序_BUCKETSORT 桶排序的思想 桶排序的代码编写 总结桶排序_BUCKETSORT假设你有五百万份试卷,每份试卷的满分都是100分,如果要你对这些试卷按照分数进行排序,天噜啦,五百万份试卷...
  • ii1245712564
  • ii1245712564
  • 2015年05月20日 13:18
  • 1142

桶排序及其应用

桶排序(Bucket Sort)有时也称为盒子排序(Bin Sort),来源于邮局使用的盒子信件分发方法。桶排序的有效性需假定输入数据是由一个完全随机过程产生,即要求桶排序的输入数据呈均匀分布,例如,...
  • u010762216
  • u010762216
  • 2015年04月20日 11:27
  • 860

常用排序算法总结10一一桶排序

桶排序(英文:Bucket Sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽...
  • u014717036
  • u014717036
  • 2016年09月06日 21:49
  • 616

Python实现八大排序算法(转载)+ 桶排序(原创)

插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想...
  • Marksinoberg
  • Marksinoberg
  • 2016年09月06日 12:03
  • 6470

Python 版桶排序

写了一个很简单的桶排序,时间复杂度 2n.def bucket(lst): buckets = [0] * ((max(lst) - min(lst))+1) for i in ran...
  • voyager3
  • voyager3
  • 2016年01月11日 20:27
  • 995

桶排序及C语言实现

桶排序及C语言实现
  • bing_bing304
  • bing_bing304
  • 2014年11月30日 10:38
  • 2768

[算法]又快又简单的排序——桶排序

在我们生活的这个世界中到处都是被排序过的。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西都需要排序,可以说排序是无处不...
  • vop444
  • vop444
  • 2016年10月16日 18:53
  • 536

《桶排序》

桶排序     又名箱排序,英文名字为Bucket sort,是一种排序算法,工作原理为将数组分到有限数量的桶子里。     桶排序是稳定的,且在大多数情况下常见排序里最快的一种,比快排还要快,缺点...
  • yxf15732625262
  • yxf15732625262
  • 2016年07月31日 16:34
  • 549

[排序算法]--桶排序的Java实现

今天在刷leetcode的时候,在41题 First Missing Positive 发现了在排序算法中还有一个桶排序,顺便做个总结。 桶排序关于桶排序先做几点说明: 1)桶排序是稳定的; ...
  • u010853261
  • u010853261
  • 2017年02月08日 21:09
  • 1209
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:桶排序程序
举报原因:
原因补充:

(最多只允许输入30个字)