选择排序思路
-
将数组分为已排序(前部)和未排序(后部)两部分。初始时已排序部分为空。
-
在每一轮中,从未排序部分找出最小(或最大)的元素,将其与未排序部分的第一个元素交换。这样,该元素就被放到了已排序部分的末尾。
-
重复上述过程,直到所有元素都被放入已排序部分。
时空复杂度
-
时间复杂度:O(n²)(无论数据是否有序,都需要进行 n-1 轮扫描)。
-
空间复杂度:O(1)(原地排序)。
-
稳定性:不稳定(例如,交换可能改变相同元素的相对顺序)。
速记套路
思路 新建中间变量,依次比较,找出极值,放入目标位置,比较n轮
套路写法 两层循环 外层轮数 内层寻找 初始索引 记录极值 内层循环外交换
int[] arr = new int[]{ 3,6,2,10,998,23,5};
for (int i = 0; i < arr.Length; i++)
{
int index = 0;
for (int j = 1; j < arr.Length-i; j++)
{
if (arr[index] < arr[j])
{
index =j ;
}
}
int temp = arr[index];
arr[index]=arr[arr.Length - 1 - i] ;
arr[arr.Length - 1 - i]=temp;
}
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}