选择最小值,与元素0进行交互。
排除元素0,选择最小值与元素1进行交换。
首先找到最小值
之后交换元素
代码实现:
//选择排序 O(n²)
class SelectSort
{
public static void Sort(int[] arr)
{
int n = arr.Length;
//外层循环控制每一轮循环中要交换的位置i
//第一轮循环 i=0 执行循环体内逻辑 找到最小值然后和arr[i]交换 将第一个元素排好序
//第二轮循环 i=1 执行循环体内逻辑 找到最小值然后和arr[i]交换 将第二个元素排好序
//....
//第n轮循环 i=n-1 执行循环体内逻辑 找到最小值然后和arr[i]交换 将最后一个元素排好序
//跳出外层循环 完成整个数组的选择排序
for (int i = 0; i < n; i++)
{
//最小元素的索引min 从未排序的第一个位置i开始寻找
int min = i;
//内层循环在[i+1...n)寻找最小值对应的索引min
for (int j = i + 1; j < n; j++)
{
if (arr[j] < arr[min])
min = j;
}
//内层循环结束,找到最小值arr[min],和未排序的边界元素arr[i]交换位置
Swap(arr, i, min);
}
}
private static void Swap(int[] arr, int i, int j)
{
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
时间复杂度:O()
什么是选择排序?
选择排序( Selection sort)是一种简单直观的排序算法。一般是初学者接触的第一个排序算法,简称为选排。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
选择排序的工作原理
选择排序算法通过选择和交换来实现排序,其排序流程如下:
(1)首先从原始数组中选择最小的(或最大的)1个数据,将其和位于第1(n)个位置的数据交换。
(2)接着从剩下的n-1个数据中选择次小的1个元素,将其和第2(n)个位置的数据交换
(3)然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序
例如给定一组数据,4,6,8,10,23其排序过程如以下所示
第一次:23,4,6,8,10
第二次:23,10,4,6,8
第三次:23,10,,8,4,6
第四次:23,10,8,6,4
程序结束,得出23,10,8,6,4
————————————————
版权声明:本文为CSDN博主「Diamond_apple」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Diamond_apple/article/details/113061807