选择排序
选择排序:数组中求每个位置,与其他位置比较的最小值,放在当前位置。
换句话:用0索引的数据;与后面其他位置数据比较,求最小值,将最小值放在0位置处;然后再用1位置元素,,与后面其他位置比较,求最小值,放在1索引位置处;同上方式比较。;,
算法过程
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
- 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
动图展示
C#代码实现
static public int[] SelectSort(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[i] > arr[j])
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
return arr;
}
static void Main(string[] args)
{
int[] arr = {2,1,3,4,34,23,21,24};
arr = SelectSort(arr);
}
冒泡排序
冒牌排序
重复地走访过要排序的数列,一次比较两个元素
算法过程
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。所有相邻元素的比较,需要比较的次数为:数组的长度。
- 如果是升序:每次比较玩所有相邻元素,求得:最后一位为最大值
图形展示
代码展示
- 1:比较数组中所有相邻元素
int[] arr = { 2, 30,21,22,19, 1};
for (int i = 0; i < arr.Length - 1; i++)
{
if (arr[i] > arr[i + 1])
{
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
}
}
- 2:重复执行数组长度 次: 比较数组中所有相邻元素
int[] arr = { 2, 30,21,22,19, 1};
for (int j = 0; j < arr.Length; j++)
{
for (int i = 0; i < arr.Length - 1; i++)
{
if (arr[i] > arr[i + 1])
{
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
}
}
}
- 3:封装为函数
static public intp[] CompareSort(int[] arr){
for (int j = 0; j < arr.Length; j++)
{
for (int i = 0; i < arr.Length - 1; i++)
{
if (arr[i] > arr[i + 1])
{
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
}
}
}
return arr;
}