简单选择排序是一种简单直观的排序算法。
工作原理:
①、将数组分成两部分,一部分为已排序好的数组,一部分为待排序数组。
②、在待排序数组中选出一个最小值(或最大值)将其放入待排序好的数组中的最前面,然后将已排序数组加一,待排序数组减一。
③、重复②操作。
看代码:
class Program
{
static void Main(string[] args)
{
int[] arr = { 12, 3, 456, 21, 7, 32, 43 };
XuanZe(arr);
}
public static void XuanZe(int[] arr)
{
//选择排序进行的次数
for (int i = 0; i < arr.Length - 1; i++)
{
int sum = i;
//比较次数
for (int j = i+1; j < arr.Length; j++)
{
//用于找出本次循环的最小值
if (arr[j] < arr[sum])
{
sum = j;
}
}
int temp = arr[sum];
arr[sum] = arr[i];
arr[i] = temp;
}
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
}
}
运行结果为:
时间复杂度分析:
最好情况下全部元素已经有序,交换次数为0,但是比较次数为O(n^2);
最坏情况下全部元素逆序,交换n-1,比较次数依然为O(n^2);
所以最优时间复杂度、最坏时间复杂度和平均时间复杂度均为O(n^2);
算法的稳定性:
选择排序是在待排序数组中选出最小/最大值然后和前面的进行交换,所以破坏了之前的稳定性,是不稳定排序。
算法适用的场合:
实际应用中和冒泡排序基本差不多,使用较少,适用于元素数量较少时