第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。(此为递增概念,递减排序的话就选择最大的元素)例子
有一个无序数组Arr[7]=[5,4,3,6,2,1,0]; 用选择排序进行排序:
- 找到Arr[0]~Arr[6]的最小值与Arr[0]交换位置, Arr = [0,5,4,3,6,2,1];
- 找到Arr[1]~Arr[6]的最小值与Arr[1]交换位置, Arr = [0,1,4,3,6,2,5];
- 找到Arr[2]~Arr[6]的最小值与Arr[2]交换位置, Arr = [0,1,2,3,6,4,5];
- 找到Arr[3]~Arr[6]的最小值与Arr[3]交换位置, Arr = [0,1,2,3,6,4,5];
- 找到Arr[4]~Arr[6]的最小值与Arr[4]交换位置, Arr = [0,1,2,3,4,6,5];
- 找到Arr[5]~Arr[6]的最小值与Arr[5]交换位置, Arr = [0,1,2,3,4,5,6];
- 找到Arr[6]~Arr[6]的最小值与Arr[6]交换位置, Arr = [0,1,2,3,4,5,6];
以此内推,当数组长度为N时,用For循环排序就行.
常数操作:每一轮都有(取n个值,比较n次,交换1次)n为操作的数组范围
长度为N的数组所进行的常数操作为num:
第一次交换:num1 = N-1*(取值+比较)+交换 = N-1+N-1+1 = 2N-1;
第二次交换:num2 = (N-2)(取值+比较)+交换 = N-2+N-2+1 = 2N-3;
第三次交换:num3 = (N-3)(取值+比较)+交换 = N-3+N-3+1 = 2N-5;
…
第N-1次操作:num(N-1) = 1*(取值+比较)+交换 = 1+1+1 = 3;
将所有操作次数相加 = aN2+bN+c
为一个关于N的2次方程
所以时间复杂度 = O(N2)



