PDA

View Full Version : سوال: الگوریتم quick sort و IndexOutOfRangeException?



vb8334
دوشنبه 02 دی 1392, 16:10 عصر
سلام

من به الگوریتم quick sort یه سری مقدار اعشاری میدم ما وقتی کران بالا و پایین رو براش میزارم
ارور میده IndexOutOfRangeException چجوری جلوی این ارور رو بگیرم. از try و catch استفاده کردم اما
فایده نداره

private void button1_Click(object sender, EventArgs e)
{

double[] arr = { 723.80, 14.50, 723.2, 1.5, 10.8, 1.4 };
var s = QuickSort(arr, 0, 5);
for (int i = 0; i < 6; i++)
{
Debug.WriteLine(s[i]);


public static double[] QuickSort(double[] array, int low, int high)
{
if (low < high)
{
int p = Partition(array, low, high);
QuickSort(array, low, p - 1);
QuickSort(array, p + 1, high);
}

return array;
}

private static int Partition(double[] array, int low, int high)
{
int lb = low + 1, rb = high;
double temp, pivot = array[low];
int p = 0;
try
{
while (lb <= rb)
{
while (array[lb] <= pivot && lb <= rb)
lb++;
while (array[rb] > pivot && lb <= rb)
rb--;
if (lb < rb)
{
temp = array[lb];
array[lb] = array[rb];
array[rb] = temp;
}
}
if (rb == high)
p = high;
else if (rb == low)
p = low;
else
p = lb - 1;
array[low] = array[p];
array[p] = pivot;
return p;
}
catch (IndexOutOfRangeException)
{
Debug.WriteLine("IndexOutOfRangeException");
}
return p;
}
مرسی

vb8334
دوشنبه 02 دی 1392, 17:40 عصر
مشکل حل شد. اشکال از حلقه های while بود.

while (lb <= rb && array[lb] <= pivot )

while ( lb <= rb && array[rb] > pivot )