数据结构-选择排序笔记

可以看这个网站的动图理解

【数据结构】八大排序(超详解+附动图+源码)_数据结构排序-CSDN博客

一  基本思想

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始(末尾)位置,

然后选出次小(或次大)的一个元素,存放在最大(最小)元素的下一个位置,

重复这样的步骤直到全部待排序的数据元素排完 。

public class Main {
    // 主方法,程序的入口点
    public static void main(String[] args) {
        // 初始化一个整数数组,包含一些随机的整数
        int array[] = {1, 66, 2, 645, 223, 531, 352, -1, -432};
        
        // 调用Print方法打印原始数组
        Print(array);
        
        // 调用sort方法对数组进行排序
        sort(array);
        
        // 再次调用Print方法打印排序后的数组
        Print(array);
    }

    // Print方法,用于打印数组中的所有元素
    public static void Print(int arr[]){
        // 遍历数组,打印每个元素
        for(int i : arr){
            System.out.printf("%d\t",i);
        }
        // 在打印完数组后换行
        System.out.println();
    }

    // sort方法,用于对传入的整数数组进行选择排序
    public static void sort(int nums[]){
        // 外层循环,i表示当前需要确定位置的元素索引
        for(int i = 0 ; i < nums.length; i++){
            // 初始化最小元素的索引和值,假设当前索引i的元素是最小的
            int minIndex = i;
            int minNum = nums[i];

            // 内层循环,从i+1开始,因为i位置的元素已经假设为最小值
            for(int j = i + 1; j < nums.length; j++){
                // 如果当前比较的元素比已知的最小值还小,更新最小值和最小值的索引
                if(nums[j] < minNum){
                    minNum = nums[j];
                    minIndex = j;
                }
            }

            // 如果最小元素的索引不是当前索引i,说明找到了一个比当前位置元素还小的元素
            // 需要将这个最小元素放到当前位置i
            if(i != minIndex){
                // 交换当前位置i的元素和最小元素的位置
                int temp = nums[i];
                nums[i] = nums[minIndex];
                nums[minIndex] = temp;
            }
        }
    }
}

二  实现代码

三  总结

 直接选择排序的特性总结:

  1.  直接选择排序思考非常好理解,但是效率不是很好(不论数组是否有序都会执行原步骤)。实际中很少使用
  2.  时间复杂度:O(N^2)
  3.  空间复杂度:O(1)
  4.  稳定性:不稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值