Java算法之选择排序(简单选择排序)


前言

下面介绍选择排序中的简单选择排序, 选择排序还有树形选择排序和堆排序
其中堆排序在往期已有介绍 , 这里是传送门


提示:以下是本篇文章正文内容,下面案例可供参考

一、简单选择排序的思路

1.基本思想

选择排序的基本思想是 : 在待排序的目标中不断的遍历,选出在指定范围内最小的元素 , 将其放到序列的最 前/后处 (前/后由给定的升降序决定)

2.步骤

1.设待排序列为arr[0~n] , 从arr[0]开始, 先假设arr[0]为关键词最小元素,记作min , 索引0记作index
2.从arr[0]开始,循环向后,将min逐个元素比较,若有元素小于min,则将min和index分别置为该元素的值,索引
3.按指定的升降序将min与序列的最前/后元素交换
4.从arr[1]开始,再次逐个比较, 其余元素以此类推,最后得到排序结果

二、代码

1.代码实现

public static  void selectSort(int[] arr){
    
    
        for(int i = 0 ; i < arr.length ; i++){
    
    
            int minIndex = i;
            int min = arr[i];
            for(int j = i + 1 ; j < arr.length ; j++){
    
    
                if(min > arr[j]){
    
    
                    min = arr[j];
                    minIndex = j;
                }
            }
            if(minIndex != i){
    
    
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
        }
        System.out.println(Arrays.toString(arr));
    }

2.算法分析

时间复杂度 : 关键词间的比较次数为KCN=n(n-1)/2 (第一轮为n-1次比较,第二轮为n-2次比较,以此类推并求和得到结果) , 因此时间复杂度为O(n^2)

空间复杂度 : 没有使用到其它的辅助数据结构,只有记录最小值及其索引的两个变量,因此空间复杂度为O(1)

较大规模数据排序时间 : 8w个数据在我电脑上约为2秒种

猜你喜欢

转载自blog.csdn.net/qq_45596525/article/details/109604305