12、排序算法
1. 冒泡排序
- 两两相邻,不停比较,不停交换,比较arr.Length轮。
void bubbleSort(int[] arr)
{
int n = arr.Length;
bool isSorted = false;
//遍历所有数组元素
for (int i = 0; i < n - 1; i++)
{
isSorted = false;
//把最大值移动到n-i -1 的位置
for (int j = 0; j < n-i - 1; j++)
{
//升序排列
if (arr[j] > arr[j+1])
{
isSorted = true;
// 交换值
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
//如果没有交换过元素,则已经排好序
if (!isSorted)
{
break;
}
}
}
}
2. 选择排序
- 创建临时变量,依次比较,找出极值,放入目标位置。
static void SelectionSort(int[] arr)
{
int n = arr.Length;
//比较n轮
for (int i = 0; i < n; i++)
{
//每轮都默认第一个元素是极值
int index = 0;
//依次 从 1 ~ 目标位置 开始比较
//目标位置为 arr.Length - 1 - 轮数
for (int j = 1; j < n - i; j++)
{
//如果有值比极值大
if (arr[index] < arr[j])
{
//记录极值的小标
index = j;
}
}
//若极值下标与目标位置相同则不交换
if (index != n - i - 1)
{
int temp = arr[index];
arr[index] = arr[n - m - 1];
arr[n - m - 1] = temp;
}
}
}