{"id":217,"date":"2023-08-18T18:04:49","date_gmt":"2023-08-18T10:04:49","guid":{"rendered":"http:\/\/blog.xjfvps.top\/index.php\/2023\/08\/18\/%e6%a1%b6%e6%8e%92%e5%ba%8f\/"},"modified":"2023-08-18T18:04:49","modified_gmt":"2023-08-18T10:04:49","slug":"%e6%a1%b6%e6%8e%92%e5%ba%8f","status":"publish","type":"post","link":"https:\/\/blog.fs.cloudns.biz\/index.php\/2023\/08\/18\/%e6%a1%b6%e6%8e%92%e5%ba%8f\/","title":{"rendered":"\u6876\u6392\u5e8f"},"content":{"rendered":"<p>#include &lt;iostream.h&gt;<BR>#include &lt;iomanip.h&gt;<br \/>\n<P><FONT face=\"Comic Sans MS\">\/\/ constant size must be defined as the array size for bucketSort to work<\/FONT><BR>const int SIZE = 12;<\/P><br \/>\n<P>void bucketSort( int [] );<BR>void distributeElements( int [], int [][ SIZE ], int );<BR>void collectElements( int [], int [][ SIZE ] );<BR>int numberOfDigits( int [], int );<BR>void zeroBucket( int [][ SIZE ] );<\/P><br \/>\n<P>int main()<BR>{<BR>&nbsp;&nbsp; int array[ SIZE ] = { 19, 13, 5, 27, 1, 26, 31, 16, 2, 9, 11, 21 };<\/P><br \/>\n<P>&nbsp;&nbsp; cout &lt;&lt; &#8220;Array elements in original order:n&#8221;;<\/P><br \/>\n<P>&nbsp;&nbsp; for ( int i = 0; i &lt; SIZE; ++i )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; setw( 3 ) &lt;&lt; array[ i ];<\/P><br \/>\n<P>&nbsp;&nbsp; cout &lt;&lt; &#8216;n&#8217;;<BR>&nbsp;&nbsp; bucketSort( array );<\/P><br \/>\n<P>&nbsp;&nbsp; cout &lt;&lt; &#8220;nArray elements in sorted order:n&#8221;;<\/P><br \/>\n<P>&nbsp;&nbsp; for ( int j = 0; j &lt; SIZE; ++j )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; setw( 3 ) &lt;&lt; array[ j ];<\/P><br \/>\n<P>&nbsp;&nbsp; cout &lt;&lt; endl;<BR>&nbsp;&nbsp; return 0;<BR>}<\/P><br \/>\n<P><FONT face=\"Comic Sans MS\">\/\/ Perform the bucket sort algorithm<BR><\/FONT>void bucketSort( int a[] )<BR>{<BR>&nbsp;&nbsp; int totalDigits, bucket[ 10 ][ SIZE ] = { 0 };<\/P><br \/>\n<P>&nbsp;&nbsp; totalDigits = numberOfDigits( a, SIZE );<\/P><br \/>\n<P>&nbsp;&nbsp; for ( int i = 1; i &lt;= totalDigits; ++i ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distributeElements( a, bucket, i );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collectElements( a, bucket );<\/P><br \/>\n<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( i != totalDigits )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zeroBucket( bucket );&nbsp; \/\/ set all bucket contents to zero<BR>&nbsp;&nbsp; }<BR>}<\/P><br \/>\n<P>\/\/ Determine the number of digits in the largest number<BR>int numberOfDigits( int b[], int arraySize )<BR>{<BR>&nbsp;&nbsp; int largest = b[ 0 ], digits = 0;<\/P><br \/>\n<P>&nbsp;&nbsp; for ( int i = 1; i &lt; arraySize; ++i )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( b[ i ] &gt; largest )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; largest = b[ i ];<\/P><br \/>\n<P>&nbsp;&nbsp; while ( largest != 0 ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++digits;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; largest \/= 10;<BR>&nbsp;&nbsp; }<\/P><br \/>\n<P>&nbsp;&nbsp; return digits;<BR>}<\/P><br \/>\n<P><FONT face=\"Comic Sans MS\">\/\/ Distribute elements into buckets based on specified digit<\/FONT><BR>void distributeElements( int a[], int buckets[][ SIZE ], int digit )<BR>{<BR>&nbsp;&nbsp; int divisor = 10, bucketNumber, elementNumber;<\/P><br \/>\n<P>&nbsp;&nbsp; for ( int i = 1; i &lt; digit; ++i )&nbsp;&nbsp; \/\/ determine the divisor<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divisor *= 10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ used to get specific digit<\/P><br \/>\n<P>&nbsp;&nbsp; for ( int k = 0; k &lt; SIZE; ++k ) {<BR><FONT face=\"Comic Sans MS\" color=#993366>&nbsp;<FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp; \/\/ bucketNumber example for hundreds digit:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ (1234 % 1000 &#8211; 1234 % 100) \/ 100 &#8211;&gt; 2<\/FONT><\/FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bucketNumber = ( a[ k ] % divisor &#8211; a[ k ] % <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( divisor \/ 10 ) ) \/ ( divisor \/ 10 );<\/P><br \/>\n<P><FONT face=\"Comic Sans MS\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ retrieve value in buckets[bucketNumber][0] to determine<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ which element of the row to store a[i] in.<\/FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elementNumber = ++buckets[ bucketNumber ][ 0 ];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buckets[ bucketNumber ][ elementNumber ] = a[ k ];<BR>&nbsp;&nbsp; }<BR>}<\/P><br \/>\n<P>\/\/ Return elements to original array<BR>void collectElements( int a[], int buckets[][ SIZE ])<BR>{<BR>&nbsp;&nbsp; int subscript = 0;<\/P><br \/>\n<P>&nbsp;&nbsp; for ( int i = 0; i &lt; 10; ++i )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ( int j = 1; j &lt;= buckets[ i ][ 0 ]; ++j )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[ subscript++ ] = buckets[ i ][ j ];<BR>}<\/P><br \/>\n<P>\/\/ Set all buckets to zero<BR>void zeroBucket( int buckets[][ SIZE ] )<BR>{<BR>&nbsp;&nbsp; for ( int i = 0; i &lt; 10; ++i )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ( int j = 0; j &lt; SIZE; ++j )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buckets[ i ][ j ] = 0;<BR>}<\/P><\/p>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;iostream.h&gt;#include &lt; &hellip; <a href=\"https:\/\/blog.fs.cloudns.biz\/index.php\/2023\/08\/18\/%e6%a1%b6%e6%8e%92%e5%ba%8f\/\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-217","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/posts\/217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/comments?post=217"}],"version-history":[{"count":0,"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/posts\/217\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/media?parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/categories?post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fs.cloudns.biz\/index.php\/wp-json\/wp\/v2\/tags?post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}