在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。
最坏情况下,即待排序记录初始状态是按第一条记录最小,之后的记录从小到大顺序排列,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)。
是一种不稳定的排序。
代码实现
private static void select(int [] array) {
int len = array.length;
for (int i =0;i<len;i++){
int key = array[i];
int temp = i;
for (int j =i+1;j<len;j++){
if (array[j]<key){
key = array[j];
temp = j;
}
}
array[temp]=array[i];
array[i] = key;
}
}