前言:
“假设我是最大的”这是在我学习选择排序时听见最多的话,选择排序先拿一个数,假设这个数是最大(小)的数,用这个选定的数去跟后面的一次比较,若比这个数大(小),则交换位置。
基本原理:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
实现步骤:
1、外循环:循环每个位置(其实就是选择了这个位置,然后用内循环去选择一个合适的数,放到这个位置);
2、内循环:在无序元素中选择一个合适的数;
3、把第二步选中的数据放到第一步选中的位置上就可以了;
时间复杂度及稳定性
时间复杂度:O(N^2)
稳定性:不稳定
分析:
时间复杂度:第一次内循环比较N - 1次,然后是N-2次,N-3次,……,最后一次内循环比较1次。
共比较的次数是 (N - 1) + (N - 2) + ... + 1,求等差数列和,得 (N - 1 + 1)* N / 2 = N^2 / 2。舍去最高项系数,其时间复杂度为 O(N^2)。
稳定性:
原始序列: 21,25,49,25*,16,08
排序后:08,16, 21,25*,25,49
两个25的位置变化了,所以是不稳定的
代码实现:
//从大到小排序
for (int i = 0; i < 9; i++) //外部循环,确定跑几趟
{
int max = i; //假设待排元素是最大的
for (int j = i+1; j < 10; j++) //内部排序
{
if (Array [max]<Array [j]) //如果定义的最大值比 要做较的数小
{
max = j; //把该数的下标给max
}
}
//交换
temp=Array[i];
Array=Array[max];
Array[max]=temp;
}
总结
以上就是对选择排序的理解,共同学习,共同进步。