Java基础数组-选择排序算法

简介: Java基础数组-选择排序算法

选择排序:


每一次从这堆“参与比较的数据当中”找出最小值

拿着这个最小值和“参与比较的这堆最前面的元素”交换位置。

选择排序比冒泡排序好在:每一次的交换位置都是有意义的。


关键点:选择排序中的关键在于,你怎么找出一堆数据中最小的。

3 2 6 1 5


假设:


第一个3是最小的。


3和2比较,发现2更小,所以此时最小的是2.


继续拿着2往下比对,2和6比较,2仍然是最小的。


继续拿着2往下比对,2和1比对,发现1更小,所以此时最小的是1.


继续拿着1往下比对,1和5比对,发现1还是小的,所以1就是最小的。


拿着1和最左边的3交换位置。


假设:


第一个2是最小的。



6 3 5


假设6是最小的:


6和3比对,发现3更小,所以此时最小的是3.



选择排序比冒泡排序的效率高。


高在交换位置的次数上。

选择排序的交换位置是有意义的。

循环一次,然后找出参加比较的这堆数据中最小的,拿着这个最小的值和

最前面的数据“交换位置”。


参与比较的数据:3 1 6 2 5 (这一堆参加比较的数据中最左边的元素下标是0)

第1次循环之后的结果是:

1 3 6 2 5


参与比较的数据:3 6 2 5 (这一堆参加比较的数据中最左边的元素下标是1)

第2次循环之后的结果是:

2 6 3 5


参与比较的数据:6 3 5 (这一堆参加比较的数据中最左边的元素下标是2)

第3次循环之后的结果是:

3 6 5


参与比较的数据:6 5 (这一堆参加比较的数据中最左边的元素下标是3)

第4次循环之后的结果是:

5 6


注意:5条数据,循环4次。


示例代码:


public class SelectSort {
    public static void main(String[] args) {
        //初始化一个一维数组
        int[] arr = {3,1,6,2,5,8,4};
        int count = 0;
        int count2 = 0;
        //选择排序
        //7条数据循环6次。(外层循环6次)
        for(int i = 0;i< arr.length-1;i++){
            //猜测最小值
            //i正好是“参加比较的这堆数据中“最左边那个元素的下标”
            //i是一个参与比较的这堆数据中的起点下标
            //假设起点i下标位置上的元素是最小的
            int min = i;
            for(int j = i + 1;j< arr.length;j++) {
                //统计比较次数
                count++;
                if (arr[j] < arr[min]) {
                    min = j;//最小值的元素下标是j
                }
            }
                //当i和min相等时,表示最初猜测是对的
                //当i和min不相等是,表示最初猜测是错的,有比这个元素更小的元素
                //需要拿着这个更小的元素和最左边的元素交换位置
                if (min != i) {
                    //表示存在更小的数据
                    //arr[min]最小的数据
                    //arr[i] 最前面的数据
                    int temp;
                    temp = arr[min];
                    arr[min] = arr[i];
                    arr[i] = temp;
                    //统计交换次数
                    count2++;
            }
        }
        // 冒泡排序和选择排序实际上比较的次数没变。
        // 交换位置的次数减少了。
        System.out.println("比较了多少次:" + count);
        System.out.println("交换了多少次:" + count2);
        //遍历排序之后的数组
        for (int i = 0;i< arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}


运行结果:


0a2653c851af460fa595bd959398a8f1.png

相关文章
|
3月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
99 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
2天前
|
监控 算法 网络协议
Java 实现局域网电脑屏幕监控算法揭秘
在数字化办公环境中,局域网电脑屏幕监控至关重要。本文介绍用Java实现这一功能的算法,涵盖图像采集、数据传输和监控端显示三个关键环节。通过Java的AWT/Swing库和Robot类抓取屏幕图像,使用Socket进行TCP/IP通信传输图像数据,并利用ImageIO类在监控端展示图像。整个过程确保高效、实时和准确,为提升数字化管理提供了技术基础。
32 15
|
8天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
22 6
|
3月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
51 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
3月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
39 4
|
3月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
44 2
|
3月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
104 2
|
3月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
159 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
3月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
25 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
3月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
30 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列

热门文章

最新文章