冒泡排序
冒泡排序就是比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的比较错综,从开始第一对到结尾的最后一对
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="arr"></param>
public static void Bubblesort(int[] arr)
{
if (arr.Length==1)
{
return;
}
for (int i = 0; i < arr.Length-1; i++)
{
bool IsSort = true;//判断顺序是否正确,如果顺序没问题直接跳过
for (int j = i+1; j < arr.Length; j++)
{
if (arr[i]>arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
IsSort = false;
}
}
if (IsSort)
{
break;
}
}
}
快速排序
从数列中挑出一个元素,当做中间值(key)。排序数列,所有元素比这个值小的放在左边,比这个值大的放在右边。在这个分区退出之后,这个值就在数列的中间位置。即分区操作。然后递归的把所有元素排序。
/// <summary>
/// 快速排序
/// </summary>
/// <param name="arr"></param>
/// <param name="begin"></param>
/// <param name="end"></param>
public static void Quicksort(int[] arr, int begin, int end)
{
if (begin>=end)//如果开始位置下标小于结束位置下标
{
return;
}
int i = begin, j = end;
int key = arr[begin];//key值设置为开始排序的第一个数
while (i<j)
{
while (i<j && arr[j]>=key)
{
j--;
}
arr[i] = arr[j];
while (i<j && arr[i]<=key)
{
i++;
}
arr[j] = arr[i];
}
arr[i] = key;
//递归排序数组左边的元素
Quicksort(arr,begin,i-1);
//递归排序数组右边的元素
Quicksort(arr, i + 1, end);
}
插入排序
实现插入排序主要是先找到一个有序序列,然后将下一个关键字插入上述有序序列,然后再从剩下的关键字中选取下一个插入对象,反复执行直到整个序列有序。
/// <summary>
/// 插入排序
/// </summary>
/// <param name="arr"></param>
public static void InsertSort(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
int t = arr[i];
int j = i;
while (j > 0 && arr[j - 1] > t)
{
arr[j] = arr[j - 1];//交换顺序
--j;
}
arr[j] = t;
}
}