PDA

View Full Version : الگوریتم مرتب سازی سریع به زبان C#‎



loknatesabz
یک شنبه 27 آذر 1390, 07:16 صبح
سلام دوستان
من برنامه ی الگوریتم Quick Sort (مرتب سازی سریع) رو به زبان C#‎‎‎‎ نوشتم اما در حین اجرا و بعداز اینکه آرایه توسط کاربر پرشد موقعی که اولین بار میخواد وارد تابع Partitionبشه پیغام پر بودن Stack (پشته) رو میده.برنامه ای که نوشتم رو پایین میذارم .لطفا هرکسی که میدونه منو راهنمایی کنه. ممنونم

static int n;



static int[] Sam = new int[n];

static void Main(string[] args)
{
Console.WriteLine("Please enter a number for array cells.");
n = Convert.ToInt32(Console.ReadLine());
Sam = new int [n];
for (int i = 0; i < n; i++)
{
Console.WriteLine(i +"omin cell is:");
Sam[i] = Convert.ToInt32(Console.ReadLine());
}
int low = 0;
int high = n;
int pivotpoint=0 ;
//for (pivotpoint = 0; pivotpoint < n; pivotpoint++)
Quick_Sort(low,high,pivotpoint);
Console.WriteLine(Sam);
Console.ReadLine();
}
static void Quick_Sort(int low, int high,int pivotpoint)
{


if (low < high)
{
Partition(low, high, pivotpoint);
Quick_Sort(low, pivotpoint - 1,pivotpoint);
Quick_Sort(pivotpoint + 1, high,pivotpoint);
}
}
static void Partition(int low, int high, int pivotpoint)
{


int j = 0;
int i = 0;
int tempSam = 0;
int pivotitem = Sam[low];


for (i = 1; i < high; i++)
if (Sam[i] > pivotitem)
{
j++;
tempSam = Sam[i];
Sam[i] = Sam[j];
Sam[j] = tempSam;
}


pivotpoint = j;
tempSam = Sam[low];
Sam[low] = Sam[pivotpoint];
Sam[pivotpoint] = tempSam;

}

secondstriker
یک شنبه 27 آذر 1390, 10:33 صبح
توی خط اول n تعریف نشده!

loknatesabz
یک شنبه 27 آذر 1390, 11:37 صبح
تعریف n رو آوردم توی Main .حین اجرای برنامه پیغام overflow شدن پشته سیستم رو میده.هرکسی میدونه لطفا راهنمایی کنه.مر30

secondstriker
یک شنبه 27 آذر 1390, 16:46 عصر
تعریف n رو آوردم توی Main .حین اجرای برنامه پیغام overflow شدن پشته سیستم رو میده.هرکسی میدونه لطفا راهنمایی کنه.مر30

اين اخطار معمولاً زماني رخ مي دهد كه يك متد خودشو فرا بخونه!
بايد الگوريتم مرتب سازي تو يه جوري بنويسي كه مجبور نشي متد رو داخل همون متد فرا خوني كني! يعني دليل اخطار خط 26 و 27 مي باشد.
اين را هم ببين:
http://stackoverflow.com/questions/4033805/stack-overflow-error-in-c-sharp-but-how-to-fix-it

fakhravari
شنبه 14 بهمن 1391, 00:33 صبح
public static int[] QuickSort(int[] 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(int[] Array, int Low, int High)
{
int lb = Low + 1, rb = High, temp, pivot = Array[Low], p;
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;
}