文章目录
基本思想
给定一组记录,经过第一轮比较后得到最小的值,并将其与数组第一个位置的元素进行交换,接着从数组第二个位置的元素开始与其余元素比较,求出最大值,与数组第二个位置的元素交换位置,以此类推。直到只剩下一个元素不需要比较。
简单来说就说( 遍历元素找到一个最小(或最大)的元素,把它放在第一个位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序。)
时间复杂度
分析它的时间复杂度发现,无论是最好最差情况,其比较次数都是一样多,第 i 趟排序需要进行 n-i 次关键字比较,此时需要比较
次。对于交换次数而言,当最好的时候,交换0次,最差的时候,交换次数为 n-1 次。
因此时间复杂度为 O(n2)。
尽管与冒泡排序时间复杂度相同,但简单选择排序的性能要优于冒泡排序。
代码实现
public class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//动态创建数组
int[] arr = new int[sc.nextInt()];
for(int i = 0 ; i< arr.length ; i++){
arr[i] = sc.nextInt();
}
for(int i=0;i<arr.length-1;i++)
{
int flag=i;// 用来记录最大值的索引位置,默认值为i
for(int j=i+1;j<arr.length;j++)
{
if(arr[flag]<arr[j])
{
flag=j;
}
}
if(flag!=i){
int temp=arr[flag];
arr[flag]=arr[i];
arr[i]=temp;
}
}
System.out.println(Arrays.toString(arr));
}
}