Day_47选择排序

news2024/11/8 6:31:23

目录

一. 选择排序的实现

        1. 简单选择排序

        2. 性能分析

二. 代码实现

        1. 核心代码

三. 代码展示

四. 数据测试

五. 总结


一. 选择排序的实现

        1. 简单选择排序

        选择排序的基本思想是:每一趟(如第i趟)在后面n-i+1(i=1,2,3...n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,完成排序。

        根据上面的思想可以很直观的得出简单选择排序算法的思想:假设排序表为L[1...n],第i趟排序即从L[i...n]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可使得整个排序表有序。

        2. 性能分析

        空间效率:仅使用常数个辅助单元,故空间效率为O(1)。

        时间效率:在简单选择排序过程中,元素的比较次数与序列的初始状态无关,始终是n(n-1)/2次,故时间复杂度是O(n^{2})

        稳定性:在第i趟找到最小的元素后,和第i个元素交换,可能会导致第i个元素与其含有相同关键字元素的相对位置发生改变。因此,简单选择排序是一种不稳定的排序方法。

二. 代码实现

        1. 核心代码

        相当easy的代码,两轮循环,第一轮循环控制最小数字的位置i,第二轮循环找到最小数字的位置min,最后将i和min互换位置即可得到最终排序结果。

    /**
     *********************
     * Selection sort. All data are valid.
     *********************
     */
    public void selectionSort() {
        DataNode tempNode;
        int tempIndexForSmallest;

        for (int i = 0; i < length - 1; i++) {
            // Initialize.
            tempNode = data[i];
            tempIndexForSmallest = i;
            for (int j = i + 1; j < length; j++) {
                if (data[j].key < tempNode.key) {
                    tempNode = data[j];
                    tempIndexForSmallest = j;
                } // Of if
            } // Of for j

            // Change the selected one with the current one.
            data[tempIndexForSmallest] = data[i];
            data[i] = tempNode;
        } // Of for i
    }// Of selectionSort

三. 代码展示

        主类:

package Day_47;

import Day_41.DataArray;

public class demo1 {
    /**
     *********************
     * The entrance of the program.
     *
     * @param args Not used now.
     *********************
     */
    public static void main(String args[]) {
//        System.out.println("\r\n-------sequentialSearchTest-------");
        int []paraKeyArray;
        paraKeyArray=new int[]{11,2,3};
        String[] paraContentArray = new String[]{"121","21","324"};
        DataArray test=new DataArray(paraKeyArray,paraContentArray);

//        test.insertionSort();
//        System.out.println("Result\r\n" + test);
        test.selectionSortTest();


    }// Of main
}

        调用类:

    /**
     *********************
     * Selection sort. All data are valid.
     *********************
     */
    public void selectionSort() {
        DataNode tempNode;
        int tempIndexForSmallest;

        for (int i = 0; i < length - 1; i++) {
            // Initialize.
            tempNode = data[i];
            tempIndexForSmallest = i;
            for (int j = i + 1; j < length; j++) {
                if (data[j].key < tempNode.key) {
                    tempNode = data[j];
                    tempIndexForSmallest = j;
                } // Of if
            } // Of for j

            // Change the selected one with the current one.
            data[tempIndexForSmallest] = data[i];
            data[i] = tempNode;
        } // Of for i
    }// Of selectionSort

    /**
     *********************
     * Test the method.
     *********************
     */
    public static void selectionSortTest() {
        int[] tempUnsortedKeys = { 5, 3, 6, 10, 7, 1, 9 };
        String[] tempContents = { "if", "then", "else", "switch", "case", "for", "while" };
        DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);

        System.out.println(tempDataArray);

        tempDataArray.selectionSort();
        System.out.println("Result\r\n" + tempDataArray);
    }// Of selectionSortTest

四. 数据测试

运行结果

五. 总结

        我个人感觉这个排序算法是最好理解的代码了(没有之一!),每一次从数字序列里面找到最小的数字,将它换到头部,一直进行n-1轮,故可以得到最终答案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 面试题:Spring,Spring MVC,Spring Boot 之间什么关系?

来&#xff0c;先和我看张图&#xff1a; Spring全家桶了为了解决不同场景的问题&#xff0c;逐渐演化出多套生态环框&#xff0c;如&#xff1a;Spring、SpringMVC、SpringBoot、SpringCloud。 Spring MVC和Spring Boot都属于Spring&#xff0c;Spring MVC是基于Spring的一个…

【每日算法】【168. Excel表列名称】

☀️博客主页&#xff1a;CSDN博客主页 &#x1f4a8;本文由 我是小狼君 原创&#xff0c;首发于 CSDN&#x1f4a2; &#x1f525;学习专栏推荐&#xff1a;面试汇总 ❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏 ⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&…

Vue-ECharts使用说明

Vue-ECharts使用说明 vue-echarts 是在Apache Echarts官网的echarts使用方法上二次封装的组件&#xff0c;方便我们创建echarts图应用到我们的项目中。 参考&#xff1a; vue-echarts 官网&#xff1a;https://github.com/ecomfe/vue-echarts Apache Echarts 官网&#xff1a;h…

推荐一款比Flink CDC更好用的免费CDC工具

很多中大型企业都希望选择一款足够轻量好用的CDC工具&#xff0c;而且最好是小白用户都能使用的CDC工具&#xff0c;今天就推荐一款小白都能安装并立即使用的CDC工具给大家。 CDC&#xff08;Change Data Capture&#xff09;是一种用于捕获和传递数据库实时变更的技术。它允许…

怎样通过大数据获客?

零售商知道他们需要大数据&#xff0c;并且正在向前冲锋以进入游戏。但许多零售商继续面临挑战。应该收集什么类型的数据&#xff1f;应如何使用数据来生成见解&#xff1f;如何衡量投资回报率&#xff1f; 101data最近对美国各种规模的零售商进行了调查。当被问及哪些流程将受…

YOLOv5/v7 添加注意力机制,30多种模块分析②,BAM模块,CBAM模块

目录 一、注意力机制介绍1、什么是注意力机制&#xff1f;2、注意力机制的分类3、注意力机制的核心 二、BAM模块1、BAM模块的原理2、实验结果3、应用示例 三、CBAM模块1、CBAM模块的原理2、实验结果3、应用示例 大家好&#xff0c;我是哪吒。 &#x1f3c6;本文收录于&#xf…

测试之路-我曾经跨过无数Bug,也怼过各大佬开发

前言&#xff1a; 这是我从事测试的第五个年头的开端&#xff0c;忙忙碌碌到头发现好像忙了个寂寞。也忘了最初走向这条不归路的初心是什么。当时14年学完计算机出来找工作&#xff0c;看着茫茫人海&#xff0c;第一反应就是退缩&#xff0c;该找什么工作&#xff1f;开发&…

sparkSQL的使用

sparksql只能处理结构化数据 基于rdd构建dataframe对象 from pyspark.sql import SparkSession from pyspark.sql.types import StructType, StringType, IntegerTypeif __name__ __main__:spark SparkSession.builder.appName(test).master(local[*]).getOrCreate()sc spa…

JS-Object无序问题

1、 背景 在开发图表功能时&#xff0c;由于历史原因&#xff0c;后端返回的图表数据如下&#xff1a; 是对象类型&#xff0c;键为日期&#xff0c;值为日期和当天日期的值。在H5端、微信小程序端运行结果正常&#xff0c;结果到了百度小程序突然发现&#xff0c;这个值的顺…

IDEA2021.1.3版本lombok插件--代码爆红问题解决

最近&#xff0c;突然心血来潮将自己工作中开发使用的idea升级到2021.1.3版本&#xff0c;安装成功后&#xff0c;打开代码发现有关get、set方法全部爆红&#xff0c;不用想&#xff0c;肯定是Lombok插件问题&#xff0c;通过setting->plugin里面搜索Lombok居然不存在&#…

终于有人把Linux系统收发网络数据包的过程讲清楚了!

Linux 服务器收到网络数据包&#xff0c;需要经过哪些处理&#xff0c;一步步将数据传给应用进程的呢&#xff1f;应用进程发送数据包时&#xff0c;Linux 又是如何操作将数据包发送出去的呢&#xff1f;今天我们就来聊聊这个话题。 在准备好接收网络数据包之前&#xff0c;Lin…

Mysql数据库入门基础篇--sql语句简单使用

Mysql数据库入门基础篇--sql语句简单使用 &#x1f53b;一、数据库创建、删除、选择1.1 &#x1f343; create database 创建数据库1.2 &#x1f343; 使用 mysqladmin 创建数据库1.3 &#x1f343; drop 命令删除数据库--一般不建议在数据库执行delete、drop等命令1.4 &#x…

redis入门学习

redis基本数据结构 redis的返回值 在设置一个key-value对的时候通常会返回ok告诉我们操作成功了&#xff0c;1代表成功&#xff0c;0代表失败&#xff0c;通常会根据返回值的不同处理不同的业务逻辑用redis.cn来查看命令 全局操作 flushdb清空内存数据库keys *展示所有存储…

第十八章:MySQL8其他新特性

第十八章&#xff1a;MySQL8其他新特性 18.1&#xff1a;MySQL8新特性概述 ​ MySQL从5.7版本直接跳跃发布了8.0版本 &#xff0c;可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强&#xff0c;开发者对MySQL的源代码进行了重构&#xff0c;最突出…

2023-06-08 Unity AssetBundle1——AB包介绍与使用

文章目录 一、AB 包介绍二、AB 包资源打包&#xff08;一&#xff09;导入 AB 包&#xff08;二&#xff09;将资源关联 AB 包&#xff08;三&#xff09;打包参数选项&#xff08;四&#xff09;打包结果&#xff08;五&#xff09;AB 包信息 三、加载 AB 包资源&#xff08;一…

如何让访问者能更快地加载出你的网站?

​  在当今互联网时代&#xff0c;网站已成为人们获取信息、交流互动、进行商业活动等的主要场所之一。然而&#xff0c;由于网络环境的复杂性和不确定性&#xff0c;用户在访问网站时常常会遇到访问缓慢、卡顿等问题&#xff0c;从而影响了用户的使用体验。为了让用户更快地…

【数据结构】常见排序算法——快速排序的三种实现、 hoare版本、挖坑法、前后指针版本

文章目录 1.常见排序2.快速排序2.1hoare版本2.2快速排序优化2.3挖坑法实现2.4前后指针实现 1.常见排序 2.快速排序 快速排序&#xff08;Quick Sort&#xff09; 是一种常见的排序算法&#xff0c;也是一种基于分治算法的排序。该算法的基本思想是将一个数据集分成两个子集&…

实验四、shell编程

一、实验目的 1.了解shell的特点和主要种类。 2.掌握 shel1 脚本的建立和执行方式。 3.掌握bash的基本语法。 4.学会编写shell 脚本。 二、实验内容 shell 脚本的建立和执行。历史命令和别名定义。shell变量和位置参数、环境变量。bash的特殊字符。一般控制结构。算术运算及…

Redis事务和管道

一、Redis事务 1、定义 可以一次执行多个命令&#xff0c;本质上是一组命令的集合。一个事务中的所有命令都会序列化&#xff0c;按顺序的串行化执行而不会被其他命令插入&#xff0c;不能加塞。 2、作用 一个队列中&#xff0c;一次性、顺序性、排他性的执行一系列命令。 …

第Y3周:yolov5s.yaml文件解读

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 ✅本周任务&#xff1a;将yolov5s网络模型中第4层的C3*2修改为C3*1&#xff0c;第6层的C3*3修改为C3*2。 简单介绍&#xff1a; YOLOv5配置了…