با سلام امروز میخوام الگوریتم های مرتب سازی رو براتون بزارم.
البته توضیح در مورد این الگوریتمها از لحاظ شرعی و عرفی جایز نیست چون واقعا راحتند ولی به هر حال اگه بازم مشکلی بود مطرح کنید.


الگوریتم مرتب سازی سریع(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.
}
}


موفق باشید یا حق.