当前位置: 首页 > news >正文

选择排序的简单理解

详细描述

选择排序的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾,以此类推,直到全部待排序的数据元素的个数为零。

选择排序详细的执行步骤如下:

  1. 初始状态:无序区为 R[1..n],有序区为空;
  2. 第 i 趟排序 (i=1,2,3…n-1) 开始时,当前有序区和无序区分别为 R[1...i-1] 和 R[i...n]。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第 1 个记录 R 交换,使 R[1...i] 和 R[i+1...n] 分别变为记录个数增加 1 个的新有序区和记录个数减少 1 个的新无序区;
  3. 经过 n-1 趟,无序序列就有序化了。

算法图解

问题解疑

为什么选择排序是不稳定的?

虽然原理上存在有序区和无序区的区分,但是选择排序算法为了提高空间的使用率,使用的是原地交换方式。

与冒泡排序两两比较交换不同,选择排序算法是最小的元素与固定位置的元素进行交换,当这个固定位置的元素被交换到另一个位置之后,也就有可能导致相等的数字次序变化。

选择排序的时间复杂度是多少?

无论原序列是有序还是无序,选择排序都需要对序列做完整的遍历,即最好情况时间复杂度和最坏情况时间复杂度都是 O(n2);平均时间复杂度是 O(n2)。

代码实现

排序接口

 
package cn.fatedeity.algorithm.sort;
/**
* 排序接口
*/
public interface Sort {
int[] sort(int[] numbers);
}

排序抽象类

 
package cn.fatedeity.algorithm.sort;
/**
* 排序抽象类
*/
public abstract class AbstractSort implements Sort {
protected void swap(int[] numbers, int src, int target) {
int temp = numbers[src];
numbers[src] = numbers[target];
numbers[target] = temp;
}
}

选择排序类

 
package cn.fatedeity.algorithm.sort;
/**
* 选择排序类
*/
public class SelectionSort extends AbstractSort {
@Override
public int[] sort(int[] numbers) {
if (numbers.length <= 1) {
return numbers;
}
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
// 选取到小的值做交换
if (numbers[i] <= numbers[j]) {
continue;
}
this.swap(numbers, i, j);
}
}
return numbers;
}
}

 详细描述

选择排序的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾,以此类推,直到全部待排序的数据元素的个数为零。

选择排序详细的执行步骤如下:

  1. 初始状态:无序区为 R[1..n],有序区为空;
  2. 第 i 趟排序 (i=1,2,3…n-1) 开始时,当前有序区和无序区分别为 R[1...i-1] 和 R[i...n]。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第 1 个记录 R 交换,使 R[1...i] 和 R[i+1...n] 分别变为记录个数增加 1 个的新有序区和记录个数减少 1 个的新无序区;
  3. 经过 n-1 趟,无序序列就有序化了。

算法图解

问题解疑

为什么选择排序是不稳定的?

虽然原理上存在有序区和无序区的区分,但是选择排序算法为了提高空间的使用率,使用的是原地交换方式。

与冒泡排序两两比较交换不同,选择排序算法是最小的元素与固定位置的元素进行交换,当这个固定位置的元素被交换到另一个位置之后,也就有可能导致相等的数字次序变化。

选择排序的时间复杂度是多少?

无论原序列是有序还是无序,选择排序都需要对序列做完整的遍历,即最好情况时间复杂度和最坏情况时间复杂度都是 O(n2);平均时间复杂度是 O(n2)。

代码实现

排序接口

 
package cn.fatedeity.algorithm.sort;
/**
* 排序接口
*/
public interface Sort {
int[] sort(int[] numbers);
}

排序抽象类

 
package cn.fatedeity.algorithm.sort;
/**
* 排序抽象类
*/
public abstract class AbstractSort implements Sort {
protected void swap(int[] numbers, int src, int target) {
int temp = numbers[src];
numbers[src] = numbers[target];
numbers[target] = temp;
}
}

选择排序类

 
package cn.fatedeity.algorithm.sort;
/**
* 选择排序类
*/
public class SelectionSort extends AbstractSort {
@Override
public int[] sort(int[] numbers) {
if (numbers.length <= 1) {
return numbers;
}
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
// 选取到小的值做交换
if (numbers[i] <= numbers[j]) {
continue;
}
this.swap(numbers, i, j);
}
}
return numbers;
}
}

相关文章:

选择排序的简单理解

详细描述 选择排序的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元素&#xff0c;然后放到已排序序列的末尾&#xf…...

使用js封装一个循环链表

直接不说废话&#xff0c;直接上代码&#xff0c;这里继承了单向链表的类LinkList &#xff0c;可以查看之前的文章&#xff0c;点这里 class Node {constructor(element) {this.element element;this.next null;} }class CirularLinkedList extends LinkList {constructor(…...

NumPy 秘籍中文第二版:二、高级索引和数组概念

原文&#xff1a;NumPy Cookbook - Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 在本章中&#xff0c;我们将介绍以下秘籍&#xff1a; 安装 SciPy安装 PIL调整图像大小比较视图和副本翻转 Lena花式索引位置列表索引布尔值索引数独的步幅技巧广播数…...

新品-图灵超频工作站GT430M介绍

曾经历史 UltraLAB GTxxxM系列是西安坤隆公司专注于超频高速计算应用的图形工作站。 2008年 获取排名第一、二的中国象棋软件均采用该机型。 2019年 推出采用Intel 超频Xeon&#xff08;28核4.8GHz&#xff09;显著提升电磁仿真频域算法求解、第一个解决8K视频解码与渲染。 今…...

js时间格式化精确到毫秒

/*** 数字前置补零* param value 值* param length 位数* returns {string}*/ export function digit(value, length 2) {if (typeof value "undefined" ||value null ||String(value).length > length) {return value;}return (Array(length).join("0&qu…...

QT样式表详解

本文详细介绍qt的样式表&#xff0c;包含样式表如何使用&#xff0c;常见语句和选择器。 背景说明 样式表用于设置外观&#xff0c;他是设置控件外观的方式之一。其他方式如下&#xff1a; 控件的成员函数&#xff0c;如QWidget::setBackground样式表调色板 优先级依次提高…...

最值得入手的好物有哪些,推荐几款实用的数码好物

随着科技的进步&#xff0c;越来越多的数码产品不断的出现在我们的生活中&#xff0c;这其中也不乏一些实用的数码产品&#xff0c;让我们可以享受更舒适的生活&#xff0c;提高我们的工作效率。下面就给大家分享几款我最近使用过的一些数码产品&#xff0c;它们不仅功能强大而…...

【20230407】NVIDIA显卡算力、Jetson比较

1 基本概念 1.1 算力单位 TOPS&#xff1a;指的是每秒钟可以执行的整数运算次数&#xff0c;它代表着计算机在处理图像、音频等任务时的处理能力。TOPS的单位是万亿次每秒&#xff08;trillion operations per second&#xff09;。一般是指整数运算能力INT8。 TFLOPS&#…...

dsl语法

查询 1.查询所有&#xff08;默认有分页查询&#xff09; #查询所有 GET /hotel/_search {"query": {"match_all": {}} } 2.match查询&#xff08;条件查询&#xff09;-----包含四川和外滩的信息&#xff0c;信息匹配度越高越靠前&#xff0c;两者存在一…...

不让CPU偷懒

文章资料摘自——《程序员的自我修养》 为了防止cpu执行完该程序后需要等待程序员手动加入下一个程序&#xff0c;才可以继续运行&#xff0c;这里大大浪费了cpu的效率&#xff0c;要知道cpu是十分昂贵的。 多道程序 在计算机发展的早期&#xff0c;CPU使用十分不方便&#x…...

动力节点王鹤SpringBoot3笔记——第七章 视图技术Thymeleaf

目录 第七章 视图技术Thymeleaf 前言 7.1 表达式 7.2 if-for 第七章 视图技术Thymeleaf 前言 Thymeleaf 是一个表现层的模板引擎&#xff0c; 一般被使用在 Web 环境中&#xff0c;它可以处理 HTML, XML、 JS 等文档&#xff0c;简单来说&#xff0c;它可以将 JSP 作…...

从比特保存和信息保存看数字资源长期保存

引用IBM以色列海法实验室的观点&#xff0c;数字资源长期保存包含两个层面含义&#xff0c;即比特保存与信息保存。也就是说&#xff0c;要实现数字资源的长期保存&#xff0c;必须同时做到比特保存和信息保存。 一 ​概念 01 比特保存&#xff0c;也叫物理保存&#xff0c;主…...

兰伯特光照模型(Lambert Lighting)和半兰伯特光照模型(Half-Lanbert)

关于漫反射 光打到凹凸不平的平面上&#xff0c;光线会被反射到四面八方&#xff0c;被称为漫反射 关于这种模型&#xff0c;由于光线由于分散&#xff0c;所以进入人眼的光线强度和观察角度没有区别 在A点和B点接收到的光线强度是一样的 在漫反射下&#xff0c;光线强度只和光…...

Python 进阶指南(编程轻松进阶):二、环境配置和命令行

原文&#xff1a;http://inventwithpython.com/beyond/chapter2.html 环境配置是配置你的计算机环境&#xff0c;以便你写代码的过程。这包括安装任何必要的工具&#xff0c;配置它们&#xff0c;以及处理安装过程中的任何问题。没有一键配置这种傻瓜式操作过程&#xff0c;因为…...

求职半年,三月成功拿到阿里offer,分享一波面经...

前言 不论是校招还是社招都避免不了各种⾯试、笔试&#xff0c;如何去准备这些东⻄就显得格外重要。不论是笔试还是⾯试都是有章可循的&#xff0c;我这个“有章可循”说的意思只是说应对技术⾯试是可以提前准备&#xff0c;所谓不打无准备的仗就是这个道理。 以下为大家&…...

餐饮店的运营需要考虑哪些方面

餐饮店的运营需要多方面的考虑和规划&#xff0c;以下是传递宝APP上一些常用的餐饮店运营方法&#xff1a; 1.定位&#xff1a;明确餐饮店的定位和目标客户群体&#xff0c;针对不同的客户需求&#xff0c;提供个性化的服务和产品&#xff0c;比如是附近的上班族&#xff0c;还…...

Multi-modal Alignment using Representation Codebook

Multi-modal Alignment using Representation Codebook 题目Multi-modal Alignment using Representation Codebook译题使用表示代码集的多模态对齐期刊/会议CVPR 摘要&#xff1a;对齐来自不同模态的信号是视觉语言表征学习&#xff08;representation learning&#xff09;的…...

关于vector的emplace_back和push_back的区别

实验代码&#xff1a; class A { public:A(int x) {x x;cout << "construct A" << endl;}A(const A& a) {x a.x;cout << "copy construct A" << endl;}A(const A&& a) {cout << "Move construct A"…...

Vue——表单输入绑定

目录 基本用法​ 文本 多行文本 复选框​ 选择器​ 值绑定​ 复选框 单选按钮 选择器选项 修饰符​ .lazy​ .number​ .trim​ 组件上的 v-model​ 在前端处理表单时&#xff0c;我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定…...

MySQL性能优化(二)索引

文章目录优化手段准备案例索引的本质索引的数据结构不同存储引擎中索引的实践MyIsam &#xff08;索引没有主次之分、都存放在MYI文件&#xff09;主键索引其他索引InnoDB&#xff08;数据即索引、索引即数据&#xff09;主键索引——聚集索引聚集索引其他索引没有主键的情况&a…...

ArcGIS Pro 3.0 气象数据处理实战:如何从365天的nc文件中提取单日降水数据

ArcGIS Pro 3.0 气象数据处理实战&#xff1a;从365天nc文件中精准提取单日降水数据 气象数据作为地理信息科学中的重要组成部分&#xff0c;其处理效率直接影响研究进度和成果质量。在众多气象数据格式中&#xff0c;NetCDF&#xff08;.nc&#xff09;因其结构化存储和多维数…...

如何使用Aimeos构建高效产品目录:从基础商品到复杂配置型产品的完整指南

如何使用Aimeos构建高效产品目录&#xff1a;从基础商品到复杂配置型产品的完整指南 【免费下载链接】aimeos Integrated online shop based on Laravel 10 and the Aimeos e-commerce framework for ultra-fast online shops, scalable marketplaces, complex B2B application…...

AIGlasses_for_navigation实际应用:为听障视障双重障碍者定制多模态反馈系统

AIGlasses_for_navigation实际应用&#xff1a;为听障视障双重障碍者定制多模态反馈系统 1. 项目背景与价值 在日常生活中&#xff0c;视障和听障人士面临着巨大的出行挑战。传统的盲杖虽然能提供基础的地面探测&#xff0c;但无法识别远处的障碍物、交通信号灯或特定地标。而…...

2026年企业AI HR选型实用手册

导读&#xff1a;这份2026年企业AI HR选型实用手册由eRoad易路出品&#xff0c;核心围绕AI技术与人力资源管理的深度融合&#xff0c;提出以“搭子”方法论打造企业落地AI HR的最短路径&#xff0c;展现了从技术应用到产业落地的HR智能化进化方向。关注公众号&#xff1a;【互联…...

如何用AI驱动的智能字幕工具解决日语视频字幕制作难题?零基础也能实现90%准确率的字幕生成方案

如何用AI驱动的智能字幕工具解决日语视频字幕制作难题&#xff1f;零基础也能实现90%准确率的字幕生成方案 【免费下载链接】N46Whisper Whisper based Japanese subtitle generator 项目地址: https://gitcode.com/gh_mirrors/n4/N46Whisper 日语视频字幕制作常常让内容…...

理论框架总搭不起来?资深导师力荐这几个AI写作辅助平台

写论文时&#xff0c;理论框架总是理不顺、逻辑不清晰&#xff1f;很多同学都遇到过这样的问题。其实&#xff0c;关键在于用对工具、走对流程——资深教授普遍建议&#xff0c;结合AI写作辅助平台能大幅提升效率。我们实测发现&#xff0c;千笔AI&#xff08;中文全流程首选&a…...

3个步骤掌握InjectFix热修复核心方案

3个步骤掌握InjectFix热修复核心方案 【免费下载链接】InjectFix InjectFix is a hot-fix solution library for Unity 项目地址: https://gitcode.com/gh_mirrors/in/InjectFix 核心能力解析 &#x1f527; 原生方法修复&#xff1a;解决线上函数逻辑错误 解决什么问…...

攻防世界 reverse题GFSJ0810-【crazy】

1.工具&#xff1a;exeinfope、IDA Pro (64-bit)、thonny2.解题&#xff1a;下载附件后&#xff0c;我们先在exeinfope里查壳&#xff0c;如下我们发现是64位无壳文件&#xff0c;然后我们把它放到IDA Pro (64-bit)里分析&#xff0c;我们点击F5先查看伪代码&#xff0c;如下代…...

Unity IL2CPP热更新实战:动态库与global-metadata.dat的无缝替换方案

1. IL2CPP热更新的核心挑战 在移动游戏开发中&#xff0c;热更新能力直接决定了产品的运维效率和用户体验。传统的Mono运行时支持Assembly动态加载&#xff0c;而IL2CPP作为Unity的AOT编译方案&#xff0c;将C#代码转换为C后编译为原生二进制&#xff0c;这带来了性能提升却牺…...

第20篇:扩展卡尔曼滤波器实战精讲

本篇前置知识&#xff1a;掌握基础线性代数、了解状态空间方程、会基础Python编程、熟悉标准卡尔曼滤波原理、接触过工控闭环数据采集。 零基础小白也能跟着吃透&#xff0c;全程避开晦涩纯数学推导&#xff0c;所有知识点绑定机器人、自动驾驶、工控实测场景&#xff0c;代码直…...