【寒假实习备战day6】选择排序算法的学习

简单的自我介绍

  • 我是一名双非大二学生,目前学习方向为Java后端,快速学习并学到了springboot,并和实验室的朋友做了一个简单的微信小程序,想在寒假找份有关互联网的实习,打算海投,城市和公司暂时没有特别强烈的意向,我会再次牢固的复习一遍Java整套学习知识,并且开始补充算法知识刷算法题,来备战这次寒假实习,并且想报名参加蓝桥杯Java B组的比赛,希望我的一些学习笔记能为你带来一些帮助,这次给大家带来的是选择排序的算法学习。
  • 昨天状态不好,发了动态,被官方小姐姐驼瑞驰回应并给出非常帮的建议,很开心更暖心。当然发帖过程中也有其他牛友们的鼓励和支持,感受到了牛客新的一面,非常感谢能参加这次活动,得到大家的关心和支持!

选择排序是什么?

选择排序是基础排序的一种,它的思路是,原数列分为有序和无序部分,每次从无序部分中 挑出极值放入有序数列部分

算法原理

对于数列{5,3,7,2,1,9,8,4}进行从小到大选择排序
初始 有序部分为空 无序部分为 5 3 7 2 1 9 8 4

第一趟:1 3 7 2 5 9 8 4,有序部分为1 无序部分为3 7 2 5 9 8 4,元素1的位置与元素5的位置对换

第二趟:1 2 7 3 5 9 8 4 ,有序部分为1 2 无序部分为 7 3 5 9 8 4 ,元素2的位置与元素3的位置对换

第三趟:1 2 3 7 5 9 8 4,有序部分为1 2 3 无序部分为7 5 9 8 4,元素3的位置与元素5的位置对换

第四趟:1 2 3 4 5 9 8 7 ,有序部分为1 2 3 4 无序部分为5 9 8 7 ,元素4的位置与元素7的位置对换

第五趟:1 2 3 4 5 9 8 7,有序部分为1 2 3 4 5 无序部分为7 9 8,元素5的位置与元素5的位置对换

第六躺:1 2 3 4 5 7 8 9,有序部分为1 2 3 4 5 7 无序部分为 8 9,元素7的位置与元素9的位置对换

第七趟:1 2 3 4 5 7 8 9,有序部分为1 2 3 4 5 7 8 无序部分为9,元素8的位置与元素8的位置对换,但因为现在只有一个元素无序 所以其实以及排序完了

可以看出几个问题

1.可以看出8个元素排序7趟

2.选择排序是选择无序部分的第一个元素与剩下元素的极值进行交换,最后吧无序部分的第一个元素加入有序部分

3.可以看出第五趟与第七趟都进行 与自身的交换,这里是优化点

代码示例

public static void main(String[] args) {
    int[] a = {5,3,7,2,1,9,8,4};
    int len = a.length;
    for (int i=0;i<len-1;i++){
        int pos=i;
        for (int j=pos+1;j<len;j++){
            if (a[j]<a[pos]) {
                pos = j;
            }
        }
        if (pos!=i){// 如果交换元素不是自身
            System.out.println("第"+(i+1)+"趟");
            int t=a[pos];
            a[pos]=a[i];
            a[i]=t;
            for (int k=0;k<len;k++)
                System.out.printf("%d ",a[k]);
            System.out.println();
        }
    }
}

结果:

第1趟
1 3 7 2 5 9 8 4
第2趟
1 2 7 3 5 9 8 4
第3趟
1 2 3 7 5 9 8 4
第4趟
1 2 3 4 5 9 8 7
第6趟
1 2 3 4 5 7 8 9

可以看出优化后少了第五趟与第七趟的的交换

选择排序和冒泡排序的异同

相同点:

1.它俩都是基础排序 时间复杂度都是O(n 2 n^2n )

2.它俩都是基于交换来进行排序

不同点:

1.选择排序是不稳定排序1,冒泡排序是稳定排序

2.选择排序在顺序度乱的情况下时间复杂度优于冒泡排序,因为选择排序每一趟只是记录下标值最终只是交换了一次,而冒泡排序每趟需要交换很多次。

3.优化后的冒泡排序在顺序度顺的情况下时间复杂度优于选择排序,因为优化后的冒泡排序 趟数与交换的次数会大幅度减少,但选择排序则不行

额外补充

不稳定排序是指,排序后元素的相对前后位置发生了变化,例如5 8 5 2 9,选择排序后是 2 5 5 8 9,但此时的 5 5 与原数列的相对前后位置是发生变化的。而冒泡排序是不变的,所以冒泡排序是稳定排序。

#后面的秋招会越来越卷吗##实习##双非##算法#
全部评论

相关推荐

冲鸭2024:亚信不去也罢
投递亚信科技(中国)有限公司等公司9个岗位
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务