PDA

View Full Version : بدست آوردن 3 تا کمترین مقدار در آرایه



ali_mp64
جمعه 02 بهمن 1388, 14:13 عصر
سلام دوستان .
چه جوری می تونم توی یه آرایه 3 تا کمترین مقدار رو بدست بیارم ؟

hamidreza20
جمعه 02 بهمن 1388, 14:18 عصر
سلام دوست عزیز

فرض کن اولین عنصرت کمترینه بعد تمام عناصر رو با اون مقایسه می کنی اگر کمتر بود جاش رو عوض می کنی میتونی سه تا متغیر تعریف کنی و اینکار رو برای همه انجام بدی.

التماس دعا...

ali_mp64
جمعه 02 بهمن 1388, 15:25 عصر
با این روش سه تا کمترین مقدار بدست نمی یاد .
کسی پیشنهاد دیگه ای نداره ؟

seven7777777
جمعه 02 بهمن 1388, 18:41 عصر
آرایه رو سورت کن به شکل صعودی و بعد سه تا عنصر اولو بردار .

hamidreza20
جمعه 02 بهمن 1388, 19:57 عصر
با این روش سه تا کمترین مقدار بدست نمی یاد .
کسی پیشنهاد دیگه ای نداره ؟

با این روش بدست میاد الگوریتمش ساده است دوست عزیز.

ولی این روش سورت که دوستمون گفتن منطقی تر ولی اگر عنصر تکراری داشته باشه اونوقت خودتون تصمیم گیری کنید.

التماس دعا....

ali_mp64
جمعه 02 بهمن 1388, 23:41 عصر
آرایه رو سورت کن به شکل صعودی و بعد سه تا عنصر اولو بردار .

من یه مشکل دیگه هم دارم اونم اینه که باید Index سه تا کمترین مقدار توی یه آرایه رو به دست بیارم . به روش sort کردن اگر مثلا آرایه زیر را داشته باشیم :

23,45,21,12,90,34,12

وقتی sort می کنیم 3 تا کمترین مقدار می شه : 12,12,21
حالا اینجا مشکل اینه که من index این سه تا رو توی آرایه اصلی (نامرتب) چه جوری بدست بیارم ؟

FastCode
شنبه 03 بهمن 1388, 00:11 صبح
حالا اینجا مشکل اینه که من index این سه تا رو توی آرایه اصلی (نامرتب) چه جوری بدست بیارم ؟


if (Rs.Length > 1)
mergeSort(ref Rs);

private static void mergeSort(ref IIndex[] d)
{
int n = d.Length;
switch (n)
{
case 2:
if (d[0].Index > d[1].Index)
{
IIndex r = d[0];
d[0] = d[1];
d[1] = r;
}
break;
case 3:
if (d[0].Index > d[1].Index)
{
IIndex r = d[0];
d[0] = d[1];
d[1] = r;
}
if (d[1].Index > d[2].Index)
{
IIndex r = d[1];
d[1] = d[2];
d[2] = r;
if (d[0].Index > d[1].Index)
{
IIndex r_ = d[0];
d[0] = d[1];
d[1] = r_;
}
}
break;
default:
int i;
int j = 0;
int k = 0;
int Half1 = n >> 1;
int Half2 = n - Half1;
IIndex[] arr1 = new IIndex[Half1];
IIndex[] arr2 = new IIndex[Half2];
j = 0;
for (i = 0; i != Half1; i++) arr1[i] = d[j++];
for (i = 0; i != Half2; i++) arr2[i] = d[j++];
mergeSort(ref arr1);
mergeSort(ref arr2);
i = j = 0;
while (Half1 != j && Half2 != k) if (arr1[j].Index <= arr2[k].Index) d[i++] = arr1[j++]; else d[i++] = arr2[k++];
while (Half1 != j) d[i++] = arr1[j++];
while (Half2 != k) d[i++] = arr2[k++];
break;
}
}
interface IIndex { int Index { get; } }
این الگوریتم قوی ترین الگوریتم سورت دنیاست(البته بعد از چند تا الگوریتم hybrid و چند تا الگوریتم single purpose و صد البته ورژن های دیگر خودش)
در کل, حالشو ببر.