一、插入排序
实现思路:拿当前元素和当前元素前面的所有元素做比较,如果发现比当前元素大的,就让它向后移动
static void Main(string[] args)
{
int[] array = { 101, 88, 56, 40, 22, 60, 35, 80, 25, 0 };
for (int i = 1; i < array.Length; i++)
{
int current = array[i];
//拿当前元素和当前元素前面的所有元素做比较
//如果发现比当前元素大的,就让它向后移动
for (int j = i - 1; j >= 0; j--)
{
if (array[j] > current)
{
array[j + 1] = array[j];
array[j] = current;
}
else
{
break;
}
}
}
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i]+" ");
}
Console.ReadKey();
}
二、选择排序
思路:每次都从未排序的数据中查找一个最小值放到最前面
static void Main(string[] args)
{
int[] array = { 101, 88, 56, 40, 22, 60, 35, 80, 25, 0 };
//每次都从未排序的数据中查找一个最小值放到最前面
for (int i = 0; i < array.Length-1; i++)
{
int min = array[i];
for (int j = i+1; j < array.Length; j++)
{
if (array[j] < min)
{
min = array[j];
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i] + " ");
}
Console.ReadKey();
}
三、快速排序
思路:1.先从数列中取出一个数作为基准数。
2.分区过程:将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
static void Main(string[] args)
{
int[] array = { 101, 88, 56, 40, 22, 60, 35, 80, 25, 0 };
QuickSort(array, 0, array.Length - 1);
foreach (var item in array)
{
Console.Write(item+" ");
}
Console.ReadKey();
}
/// <summary>
/// 1.先从数列中取出一个数作为基准数。
/// 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
/// 3.再对左右区间重复第二步,直到各区间只有一个数。
/// </summary>
/// <param name="array">要排序的数组</param>
/// <param name="left">要排序数组的开始索引</param>
/// <param name="right">要排序数组的结束索引</param>
static void QuickSort(int[] array, int left, int right)
{
if (left < right)
{
int temp = array[left];//基准数
int i = left;//从左往右开始位置
int j = right;//从右往左开始位置
//当i=j的时候,说明找到了一个中间位置,这个位置就是基准数所在的位置
while (i<j)
{
//从右往左遍历
while (i < j)
{
//找到一个小于或等于基准数的数字,把它放到左半边
if (array[j] <= temp)
{
array[i] = array[j];
break;
}
else
{
j--;//没找到的话继续遍历下一个数字作比较
}
}
//从左往右遍历
while (i < j)
{
//找到一个大于基准数的数字,把它放到右半边
if (array[i] > temp)
{
array[j] = array[i];
break;
}
else
{
i++;//没找到的话继续遍历下一个数字作比较
}
}
}
//跳出循环 现在i=j i是中间位置
array[i] = temp;
QuickSort(array,left,i-1);
QuickSort(array,i+1,right);
}
}