版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/88746639
一、直接选择排序的基本思想
简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。
二、代码
public static void selectSort(int[] arr)
{
int length=arr.length;
int min;
for(int i=0;i<length;i++)
{
min=i;
for(int j=i+1;j<length;j++)
{
if(arr[min]>arr[j]) //注意这里是arr[min]>arr[j]
{
min=j;
}
}
if(min!=i)
swap(arr,i,min);
}
}
private static void swap(int[] arr, int i, int j) {
// TODO Auto-generated method stub
int tmp=arr[j];
arr[j]=arr[i];
arr[i]=tmp;
}
三、时间复杂度、空间复杂度
最好、最坏、平均时间复杂度均为O(n^2)
【因为元素无序,又双层循环】
空间复杂度:O(1)
【因为需要一个临时变量来交换元素位置】
四、稳定性
那么,在一趟选择时,如果当前锁定元素比后面一个元素大,而后面较小的那个元素又出现在一个与当前锁定元素相等的元素后面,那么交换后位置顺序显然改变了。
呵呵!比较拗口,举个例子:序列5 8 5 2 9, 我们知道第一趟选择第1个元素5会与2进行交换,那么原序列中两个5的相对先后顺序也就被破坏了。
所以选择排序不是一个稳定的排序算法。