static void Main(string[] args)
{
int[] intArray = { 7, 5, 3, 4, 1, 6, 2, 9, 8, 0 ,12,14,43,44,13,16,15};
QuickSort(intArray);
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
Console.ReadKey();
}
#region 选择排序
public static void SelectSort(IList<int> data)
{
for (int i = 0; i < data.Count - 1; i++)
{
int temp = data[i];
int min = i;
//每次一个内循环选出一个最小的
for (int j = i + 1; j < data.Count; j++)
{
if (data[j] > temp)
{
min = j;
temp = data[j];
}
}
//将这个内循环选出的最小的放在前面
if (min != i)
{
Swap(data, min, i);
}
}
}
/// <summary>
/// 交换数据
/// </summary>
/// <param name="data"></param>
/// <param name="min"></param>
/// <param name="i"></param>
private static void Swap(IList<int> data, int min, int i)
{
int temp;
temp = data[min];
data[min] = data[i];
data[i] = temp;
}
#endregion
#region 冒泡排序
public static void BubbleSort(IList<int> data)
{
for (int i = data.Count-1; i >0 ; i--)
{
for (int j = 0; j < i; j++)
{
if (data[i]>data[j])
{
Swap(data,i,j);
}
}
}
}
#endregion
#region 鸡尾酒排序
public static void BubbleCocktailSort(IList<int> data)
{
//需要来回a,length/2趟
for (int i = 0; i < data.Count/2; i++)
{
//类冒泡,交换最大值至右端
for (int j = i; j+1 < data.Count-i ; j++)
{
if (data[j]>data[j+1])
{
Swap(data,j,j+1);
}
}
//类冒泡,交换最小值至左端
for (int m = data.Count-1-i; m >i; m--)
{
if (data[m - 1] > data[m])
{
Swap(data, m, m - 1);
}
}
}
}
#endregion
#region 插入排序
public static void insertionSort(IList<int> data)
{
for (int i = 1; i < data.Count; i++)
{
if (data[i]<data[i-1])
{
int temp=data[i];
int j;
//执行到此步骤时,data[i]之前的都已经完成了排序,将data[i]插入到一个合适的位置
for ( j=i ; j>0 && data[j-1]>temp ; j--)
{
data[j] = data[j - 1];
}
data[j] = temp;
}
}
}
#endregion
#region 快速排序
public static void QuickSort(int[] numbers)
{
//Sort(numbers, 0, numbers.Length - 1);
quick_sort(numbers, 0, numbers.Length-1);
}
private static void Sort(int[] numbers, int left, int right)
{
if (left < right)
{
int middle = numbers[(left + right) / 2];
int i = left - 1;
int j = right + 1;
while (true)
{
while (numbers[++i] < middle) ;
while (numbers[--j] > middle) ;
if (i >= j)
break;
Swap(numbers, i, j);
}
Sort(numbers, left, i - 1);
Sort(numbers, j + 1, right);
}
}
#endregion