PDA

View Full Version : سوال: مشکل با الگوریتم bucket sort



storm_saeed
پنج شنبه 31 مرداد 1392, 22:56 عصر
سلام دوستان این کد مرتب سازی سطلی هست که تابع اش همونیه که تو ویکی پدیا هست

#include <iostream>
using namespace std;
void bucketSort(int a[],int size, int max)
{
int* buckets = new int[max];
int SIZE = size;

for(int j = 0 ; j <= max ; j++)
buckets[j] = 0;

for(int i = 0 ; i < SIZE ; i++)

++buckets[a[i]];

for(int i = 0 , j = 0 ; j <= max ; ++j)
for(int k = buckets[j] ; k > 0 ; k--)
a[i++] = j;

for(int i = 0 ; i < SIZE ; i++)
cout << a[i] << " ";

cout << "\n";
}



int main()
{
int size;
cout<<"enter yot size \n";
cin>>size;
int* a=new int [size];
cout<<"enter your numbers \n";
for(int i=0;i<size;i++)
cin>>a[i] ;
cout<<endl;
//////
int max = a[0];
for(int i = 0;i<size; i++)
if(a[i] > max)
max = a[i];
/////
bucketSort(a, size, max);
return 0;
}


مشکل من اینه که کلا نمیفهمم چیکار داره میکنه
اول که بیشترین عدد رو پیدا میکنه مثلا بین 10 تا عدد ,عدد 33 بیشترین بود بعد یه ارایه 33 تایی میسازه و بعدشم که هرعدد رو مثلا 5 رو توی bucket[5] میریزه و.. یعنی کلیات الگوریتمو میدونم ولی..
مشکل من اینجاست

for(int i = 0 ; i < SIZE ; i++)

++buckets[a[i]];

for(int i = 0 , j = 0 ; j <= max ; ++j)
for(int k = buckets[j] ; k > 0 ; k--)
a[i++] = j;

for(int i = 0 ; i < SIZE ; i++)
cout << a[i] << " ";

cout << "\n";

نمیفهمم چطور الگوریتمو اجرا کرده هدفش از
++buckets[a[i]];
و
for(int i = 0 , j = 0 ; j <= max ; ++j)
for(int k = buckets[j] ; k > 0 ; k--)
a[i++] = j;
چیه؟
ممنون

hadi0x7c7
جمعه 01 شهریور 1392, 00:52 صبح
به نظر من اینجا رو یه عنایت بفرمایید :
http://stackoverflow.com/questions/15082773/can-someone-please-explain-how-this-implementation-of-bucket-sort-works

storm_saeed
جمعه 01 شهریور 1392, 09:46 صبح
ممنون حل شد