namespace Sort
{
public class Sort
{
public static void Main()
{
int[] arr = new int[] { 5, 1, 13, 6, 10, 55, 99, 2, 87, 12, 34, 75, 33, 47 };
BubbleSorter.Sort(arr);
//SelectionSorter.Sort(arr);
//QuickSorter.Sort(ref arr, 0, arr.Length - 1);
//InsertionSorter.Sort(arr);
//ShellSorter.Sort(arr);
}
}
}
冒泡排序
class BubbleSorter
{
public static void Sort(int[] list)
{
for (int i = 0; i < list.Length - 1; i++)
{
bool over = true;
for (int j = 0; j < list.Length - i - 1; j++)
{
if (list[j] > list[j + 1])
{
over = false;
int temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
foreach (var item in list)
{
Console.Write(item + ", ");
}
Console.WriteLine();
if (over)
{
break;
}
}
}
}
插入排序
class InsertionSorter
{
public static void Sort(int[] list)
{
for (int i = 1; i < list.Length; i++)
{
int temp = list[i];
int j = i;
while ((j > 0) && (list[j - 1] > temp))
{
list[j] = list[j - 1];
--j;
}
list[j] = temp;
foreach (var item in list)
{
Console.Write(item + ", ");
}
Console.WriteLine();
}
}
}
快排
class QuickSorter
{
public static void Sort(ref int[] list, int start, int end)
{
if (start >= end) return;
int i = start;
int j = end;
int middle = list[(start + end) / 2];
while (true)
{
while (i < end && list[i] < middle) { i++; };
while (j > 0 && list[j] > middle) { j--; };
if (i == j) break;
int temp = list[i];
list[i] = list[j];
list[j] = temp;
if (list[i] == list[j]) j--;
}
foreach (var item in list)
{
Console.Write(item + ", ");
}
Console.WriteLine();
Sort(ref list, start, i);
Sort(ref list, i + 1, end);
}
}
选择排序
class SelectionSorter
{
public static void Sort(int[] list)
{
for (int i = 0; i < list.Length - 1; i++)
{
int min = i;
for (int j = i + 1; j < list.Length; j++)
{
if (list[j] < list[min])
min = j;
}
int temp = list[min];
list[min] = list[i];
list[i] = temp;
foreach (var item in list)
{
Console.Write(item + ", ");
}
Console.WriteLine();
}
}
}
希尔排序
class ShellSorter
{
public static void Sort(int[] list)
{
int inc;
for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
for (; inc > 0; inc /= 3)
{
for (int i = inc + 1; i <= list.Length; i += inc)
{
int t = list[i - 1];
int j = i;
while ((j > inc) && (list[j - inc - 1] > t))
{
list[j - 1] = list[j - inc - 1];
j -= inc;
}
list[j - 1] = t;
}
foreach (var item in list)
{
Console.Write(item + ", ");
}
Console.WriteLine();
}
}
}