直接选择排序(Straight Select Sorting)
介绍
简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。
过程动画:
直接选择排序代码实现(java)
public static int[] StraightSelectSort(int [ ] array) {
//N个数组元素,就需要循环N轮
for(int i = 0; i < array.length-1; i++){
//最小数的索引,该索引每次都根据外层循环的计数器来觉得初始值。
int minIndex = i;
for (int j = i + 1; j < array.length; j++)
{
//根据最小数的索引,判断当前这个数是否小于最小数。
//如果小于,则把当前数的索引作为最小数的索引。
//否则不处理。
if(array[minIndex] > array[j]){
minIndex = j;
}
//直到循环完成的时候,minIndex肯定就是当前这轮循环中,最小的那个。
}
//System.out.print(i + "轮,最小数" + array[minIndex] + ",");
//System.out.print("原索引" + minIndex + ",新索引" + i);
//得到最小数的索引后,把该索引对应的值放到最左边,并且把最左边的值放到索引所在的位置.
//最左边的值
int temp = array[i];
//把最小数索引对应的值放到最左边
array[i] = array[minIndex];
//把原来最左边对应的值放到最小数索引所在的位置
array[minIndex] = temp;
}
return array;
}
性能分析
时间复杂度:对于交换操作,在最好情况下也就是数组完全有序的时候,无需任何交换移动,在最差情况下,也就是数组倒序的时候,交换次数为n-1次。综合下来,时间复杂度为O(n2)
稳定性:由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。
空间复杂度: O(1)