当前位置:网站首页>【21天学习挑战赛】直接选择排序

【21天学习挑战赛】直接选择排序

2022-08-10 15:25:00 Alex抱着爆米花


活动地址:CSDN21天学习挑战赛

怕什么真理无穷,进一步有一份的欢喜。

【21天学习挑战赛】直接插入排序的数据操作

我为什么参与挑战赛

1,机缘

读到研一了,暑假假期打开私信发现这个挑战赛就鼓起勇气参加了。

2,期待的收获

A, 本人在华南理工大学攻读专硕,目前研究方向是图像恢复,从事深度学习相关工作,目标是从事Java后端开发。
B, 期待您的反馈,如果有什么不对的地方,欢迎指正!
C, 期待认识志同道合的领域同行或技术交流。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦

什么是直接选择排序?

直接选择排序的又称为简单选择排序,整个过程是每一趟都将无序区中的所有元素进行逐一比较,找到最小的元素,与无序区中的首个元素进行交换,然后有序区长度+1,无序区-1。重复上述步骤,直到所有元素都排列好。
在这里插入图片描述

直接选择排序的优劣

优势

简单易于实现,空间复杂度低,只涉及到元素间的交换,不用引入其他变量,空间复杂度为O(1)

劣势

时间复杂度高,因为是for循环的嵌套,并且是逐一比较,时间复杂度为O(n^2)

直接选择排序的步骤

  • 在第一趟中,从n个记录中找出最小值与第1个记录交换
  • 第二趟中,从n-1个记录中找出最小值与第2个记录交换
  • 第N趟中,从n-i+1个记录中与第i个记录交换,直到完成i=n-1时结束操作

️ 算法实现

public class SelectSort {
    

    public static void main(String[] args) {
    
        // input data
        int[] a = {
    11,34,20,10,12,35,41,32,43,14};
        // 调用选择排序
        sort(a);
        // 查看排序结果
        for (int data : a){
    
            System.out.print(data + "\t");
        }
    }

    private static void sort(int[] a){
    
        // 外层循环用于控制循环的趟数
        for (int i = 0;i < a.length - 1;i++){
    
            int k = i;
            // 内层循环的作用是在无序区中选出最小的元素并记录
            for (int j = i + 1;j < a.length;j++){
    
                if (a[j] < a[k]) {
    
                    k = j;
                }
            }
            // 如果本轮选出的最小元素没有在对应的位置上则交换
            if (k != i){
    
                int tmp = a[i];
                a[i] = a[k];
                a[k] = tmp;
            }
        }
    }

}

如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
️ 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!

​​

原网站

版权声明
本文为[Alex抱着爆米花]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_41080854/article/details/126214104