جمعه ۱۰ خرداد ۱۳۹۲ ارسال شده توسط prodo
در صورتی که بازهی اعداد مورد استفاده کوچیک باشه مثلاً ۱ تا ۱۰۰ باشه. در این صورت میشه یه آرایهی ۱۰۰ تایی ساخت که تعداد هر کدوم از اعداد رو نگه میداره
int count[100] = {0}:
for(int i=0; i
count[array[i]]++;
در صورتی که اسم آرایهی اولیه `array` باشه که `n` خونه داره.
اما در حالت کلی این روش حافظهی زیادی مصرف میکنه. چون ممکنه `array` آرایهای از اعداد `long int` باشه که نمیشه برای هر عددش یه خونهی آرایه در نظر گرفت. در این صورت من دو یه راه به نظرم میرسه.
ابتدا آرایه رو مرتب میکنیم. حالا فرض کنیم آرایهی مرتب شده `array` با `n` عضو باشه. الگوریتم زیر مد رو میده
int number = 0, count = 0, max_number = 0, max_count = 0;
number = max_number = array[0];
count = max_count = 1;
for(int i=1; i
{
if(number == array[n])
{
count++;
}
else
{
if(count > max_count)
{
max_count = count;
max_number = number;
}
count = 1;
number = array[i];
}
}
جمعه ۱۰ خرداد ۱۳۹۲ ویرایش شده توسط prodo
در صورتی که بازهی اعداد مورد استفاده کوچیک باشه مثلاً ۱ تا ۱۰۰ باشه. در این صورت میشه یه آرایهی ۱۰۰ تایی ساخت که تعداد هر کدوم از اعداد رو نگه میداره
int count[100] = {0}:
for(int i=0; i<n; i++)
count[array[i]]++;
در صورتی که اسم آرایهی اولیه `array` باشه که `n` خونه داره.
اما در حالت کلی این روش حافظهی زیادی مصرف میکنه. چون ممکنه `array` آرایهای از اعداد `long int` باشه که نمیشه برای هر عددش یه خونهی آرایه در نظر گرفت. در این صورت من دو یه راه به نظرم میرسه.
ابتدا آرایه رو مرتب میکنیم. حالا فرض کنیم آرایهی مرتب شده `array` با `n` عضو باشه. الگوریتم زیر مد رو میده
int number = 0, count = 0, max_number = 0, max_count = 0;
number = max_number = array[0];
count = max_count = 1;
for(int i=1; i<n; i++)
{
if(number == array[n])
array[i])
{
count++;
}
else
{
if(count > max_count)
{
max_count = count;
max_number = number;
}
count = 1;
number = array[i];
}
}