本篇内容为牛客网,左程云算法课程课堂笔记。
(1)课程讲解:选择排序:一开始在整个数组范围上选出最小值:放在位置零上,然后再1到n-1的位置上,选出一个最小值,放在位置1上。按照这样的方法,直到数组结束。
时间复杂度为o(n^2);选择排序每次实现将一个值放到他最终的位置上,从前往后。而冒泡排序是从后往前,把图个元素放到他最终可以放的位置上。
public int[] selectionSort(int[] A, int n) {
for (int i = 0; i < A.length; i++) {
int min=i;;
for (int j = i+1; j < A.length; j++) {
if (A[min]>A[j]) {
min=j;//最小值的那个位置
}
}
if (min!=i) {
int tmp=A[min];
A[min]=A[i];
A[i]=tmp;
}
}
return A;
}
无论记录的初始排列如何,所需的关键字间的比较次数相同,均为n(n-1)/2,总的时间复杂度为O(n2);
空间复杂度 O(1);
简单选择排序算法不是一个稳定的排序算法:因为,简短选择排序,是从后续序列中,找出最小的那个元素,和他进行交换,那么如果后续序列中有一个和i位置相同的值的元素,又有最小值在这个相同的值的后面,那么i这个位置上的值,就会被交换在与他相同的值的后面去。所以,选择排序不是一种稳定的排序算法。