با سلام امروز میخوام الگوریتم های مرتب سازی رو براتون بزارم.
البته توضیح در مورد این الگوریتمها از لحاظ شرعی و عرفی جایز نیست چون واقعا راحتند ولی به هر حال اگه بازم مشکلی بود مطرح کنید.
الگوریتم مرتب سازی سریع(Quick Sort):
public void QuickSort(int[] arr, int low, int high)
{
if (high > low)
{
int pivotIndex = Partition(arr, low, high);
QuickSort(arr, low, pivotIndex - 1);
QuickSort(arr, pivotIndex + 1, high);
}
}
public int Partition(int[] arr, int low, int high)
{
int pivotIndex = low;
int pivotItem = arr[pivotIndex];
// print
Console.WriteLine("\nPivot Item={0}\nBefore:", pivotItem);
for (int t = low; t <= high; t++)
{
Console.Write(" {0} ", arr[t]);
}
Console.WriteLine();
int temp;
for (int i = low + 1; i <= high; i++)
{
if (pivotItem > arr[i])
{
pivotIndex++;
temp = arr[i];
arr[i] = arr[pivotIndex];
arr[pivotIndex] = temp;
}
}
temp = arr[pivotIndex];
arr[pivotIndex] = arr[low];
arr[low] = temp;
// print
Console.WriteLine("After");
for (int t = low; t <= high; t++)
{
Console.Write(" {0} ", arr[t]);
}
Console.WriteLine();
return pivotIndex;
}
}
الگوریتم مرتب سازی ادغامی(merge sort):
public void MergeSort(int arraySize, int[] arr)
{
int size1 = arraySize / 2;
int size2 = arraySize - size1;
int[] array1 = new int[size1];
int[] array2 = new int[size2];
// copy
for (int i = 0; i < size1; i++)
{
array1[i] = arr[i];
}
for (int i = size1; i < arraySize; i++)
{
array2[i - size1] = arr[i];
}
if (arraySize > 1)
{
MergeSort(size1, array1);
MergeSort(size2, array2);
Merge(size1, size2, array1, array2, arr);
}
}
public void Merge(int arraySize1, int arraySize2, int[] array1, int[] array2, int[] arr)
{
int i = 0,j = 0;
int k = 0;
//print
Console.WriteLine("\nBefore Merge:");
for (int t = 0; t < arraySize1; t++)
{
Console.Write(" {0} ", array1[t]);
}
Console.Write(" ***** ");
for (int t = 0; t < arraySize2; t++)
{
Console.Write(" {0} ", array2[t]);
}
//sort
while (i < arraySize1 & j < arraySize2)
{
if (array1[i] <= array2[j])
{
arr[k] = array1[i];
i++;
}
else
{
arr[k] = array2[j];
j++;
}
k++;
}
if (i == arraySize1)
{
while (j < arraySize2)
{
arr[k] = array2[j];
j++;
k++;
}
}
if (j == arraySize2)
{
while (i < arraySize1)
{
arr[k] = array1[i];
i++;
k++;
}
}
// print merged array
Console.WriteLine("\nMerged:");
for (int t = 0; t < arr.Length; t++)
{
Console.Write(" {0} ", arr[t]);
}
}
مرتب سازی تعویضی(Exchange sort):
public int[] ExchangeSort(int[] arr)
{
int temp;
for (int i = 0; i < arr.Length - 1; i++)
{
// Sort
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[i] > arr[j])
{
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
// Show result
for (int k = 0; k < arr.Length; k++)
{
Console.Write(" {0} ", arr[k]);
}
Console.WriteLine();
}
return arr;
}
و در نهایت مرنب سازی حبابی:
static void bubble_sort2(int [] arr,int n)
{
for(int i=n-1;i>0;i--)
{
int c = 0;
for(int j=0;j<i ;j++)
{
if (arr[j]>arr[j + 1])
{
int t = arr [j];
arr [j] = arr [j + 1];
arr [j + 1] = t;
C++;
}
}
if (c == 0) break; //baraye behine kardane algorithm.agar nabashad ham dorost kar khahad kard.
}
}
موفق باشید یا حق.