选择排序


文章目录

基本思想

给定一组记录,经过第一轮比较后得到最小的值,并将其与数组第一个位置的元素进行交换,接着从数组第二个位置的元素开始与其余元素比较,求出最大值,与数组第二个位置的元素交换位置,以此类推。直到只剩下一个元素不需要比较。
简单来说就说( 遍历元素找到一个最小(或最大)的元素,把它放在第一个位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序。)

时间复杂度

分析它的时间复杂度发现,无论是最好最差情况,其比较次数都是一样多,第 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));
        
                
            }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录