class Sort//排序算法总结
{
/// <summary>
/// 冒泡排序算法。下面一个方法存在一个缺陷。当排好序后还会进行循环
/// (注释:两两一比较前面的比后面的大就交换)
/// </summary>
/// <param name="array"></param>
public void BubbleSort(int[] array)
{
int i, j, temp;
for (i = 0; i < array.Length; i++)
{
for ( j = 0; j < array.Length-1; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
/// <summary>
/// 直接插入排序法
/// (注:假定第一个数是一个排序好的数组,然后依次取出后面一个数插入
/// 到排好序的数组中前面排好序的数组递增后面数组递减)
/// </summary>
public void InsertSort(int[] array)
{
int i, j, temp;
for ( i = 1; i < array.Length; i++)
{
if (array[i] < array[i - 1])
{
temp = array[i];
for (j = i - 1; j >= 0 && temp < array[j]; j--)
{
array[j+1]=array[j];//已经吧后面取出的数算在了前面数组中。类似冒泡排序把它向前冒泡到合适位置
}
array[j + 1] = temp;
}
}
}
/// <summary>
/// 快速排序算法
/// </summary>
/// <param name="array"></param>
/// <param name="low"></param>
/// <param name="high"></param>
public void QuickSort(int[] array,int low,int high)
{
int i = low;
int j = high;
int key=array[i];
while (i < j)
{
while (array[j] > key)
{
j--;
}
array[i] = array[j];
while (array[i] < key)
{
i++;
}
array[j] = array[i];
}
array[i] = key;
if (low<i-1)
{
QuickSort(array, i,low - 1);
}
if (high > j + 1)
{
QuickSort(array, low + 1, high);
}
}
/// <summary>
/// 选择排序算法
/// (注:从后面选出最小的一个数插入到前面的数组里)
/// </summary>
/// <param name="array"></param>
public void SelectionSort(int[] array)
{
int min=0;
for (int i = 0; i < array.Length - 1; i++)
{
min = i;
for (int j = i+1; j < array.Length ; j++)
{
if (array[j] < array[min])
{
min = j;
}
}
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}