数据结构之选择排序

【数据结构 — 排序 — 选择排序】 数据结构 — 排序 — 选择排序 阅读详情

选择排序(不稳定)

算法思想

每一趟均对数组未排序区间进行排序,将未排序区间的第一个元素和未排序区间的其他元素进行一一比较,找到未排序区间中最小的元素,与第一个元素进行交换。

时间复杂度

  • 最好情况:O(n^2)
  • 最坏情况:O(n^2)
  • 平均复杂度:O(n^2)

实现思路

以arr[7] = {6,4,8,1,9,2,3}为例(默认升序):
先定义一个边界i区分已排序数组和未排序数组,[0,i)表示已排序数组,[i,size)表示未排序数组,定义一个min用于更新未排序数组每次比较较小值的下标,定义一个索引j用于探测未排序数组中的元素。
第一趟排序边界i的初始值为0,所以待排序区间为[0,size),待排序数组为arr = {6,4,8,1,9,2,3}
1.min = 0,j = i +1 = 1,arr[j] = 4 < arr[min] = 6,所以min = 1
2.j++ = 2,arr[j] = 8 !< arr[min] = 4,所以不做改变
3.j++ = 3,arr[j] = 1 < arr[min] = 4,所以min = 3
4.j++ = 4,arr[j] = 9 !< arr[min] = 1,所以不做改变
5.j++ = 5,arr[j] = 2 !< arr[min] = 1,所以不做改变
6.j++ = 6,arr[j] = 3 !< arr[min] = 1,所以不做改变
第一次循环结束,min != i,所以将arr[min]和arr[i]交换,此时数组变为arr = {1,4,8,6,9,2,3}
第二趟排序 i++ = 1,所以待排序区间为[1,size),待排序数组为arr = {4,8,6,9,2,3}
1.min = 1,j = i +1 = 2,arr[j] = 8 !< arr[min] = 4,所以不做改变
2.j++ = 3,arr[j] = 6 !< arr[min] = 4,所以不做改变
3.j++ = 4,arr[j] = 9< arr[min] = 4,所以不做改变
4.j++ = 5,arr[j] = 2 < arr[min] = 4,所以min = 5
5.j++ = 6,arr[j] = 3 !< arr[min] = 2,所以不做改变
第二次循环结束,min != i,所以将arr[min]和arr[i]交换,此时数组变为arr = {2,8,6,9,4,3}
第三趟排序 i++ = 2,所以待排序区间为[2,size),待排序数组为arr = {8,6,9,4,3}
1.min = 2,j = i +1 = 3,arr[j] = 6 < arr[min] = 8,所以min = 3
2.j++ = 4,arr[j] = 9 !< arr[min] = 6,所以不做改变
3.j++ = 5,arr[j] = 4< arr[min] = 6,所以min = 5
4.j++ = 6,arr[j] = 3 < arr[min] = 4,所以min = 6
第三次循环结束,min != i,所以将arr[min]和arr[i]交换,此时数组变为arr = {3,6,9,4,8}
第四趟排序 i++ = 3,所以待排序区间为[3,size),待排序数组为arr = {6,9,4,8}
1.min = 3,j = i +1 = 4,arr[j] = 9 !< arr[min] = 6,所以不做改变
2.j++ = 5,arr[j] = 4 < arr[min] = 6,所以min = 5
3.j++ = 6,arr[j] = 8 !< arr[min] = 6,所以不做改变
第四次循环结束,min != i,所以将arr[min]和arr[i]交换,此时数组变为arr = {4,9,6,8}
第五趟排序 i++ = 4,所以待排序区间为[4,size),待排序数组为arr = {9,6,8}
1.min = 4,j = i +1 = 5,arr[j] = 6 < arr[min] = 9,所以min = 5
2.j++ = 6,arr[j] = 8 !< arr[min] = 6,所以不做改变
第五次循环结束,min != i,所以将arr[min]和arr[i]交换,此时数组变为arr = {6,9,8}
第六趟排序 i++ = 5,所以待排序区间为[5,size),待排序数组为arr = {9,8}
1.min = 5,j = i +1 = 6,arr[j] = 8 < arr[min] = 9,所以min = 6
第六次循环结束,min != i,所以将arr[min]和arr[i]交换,此时数组变为arr = {8,9}
此时i++ = 6,j = i + 1 = 7 !< size = 7,循环结束,数组已经有序

代码实现

package Sort;

public class SelectSort {
    public static void selectSort(int[] arr,int size){
        if(size <= 1){
            return;
        }
        for(int i = 0;i < size;i++){
            int min = i;
            for(int j = i + 1;j < size;j++){
                if(arr[j] < arr[min]){
                    min = j;
                }
            }
            if(min != i){
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {6,4,8,1,9,2,3};
        selectSort(arr,7);
        for(int i:arr){
            System.out.print(i + " ");
        }
    }
}

数据结构(C语言)-选择排序 数据结构(C语言)-选择排序 这次学习的总结为–选择排序包括 简单选择排序和堆排序。总结两种排序的基本构造思路,并比较排序时间 选择排序的基本思想是:每次从待排序的数据元素集合中选取关键字最小(或最大)的数据元素,放到数据元素集合的最前(或最后),数据元素集合不断缩小,当数据元素集合为空时选择排序结束。 一.简单选择排序 1.基本思想 第一次从数组A[0…n-1]中选取最小值,与A[0]交换 第二... 阅读详情

相关推荐

C++:数据结构排序菜单选择

目前,类似的排序算法菜单选择程序常常用于学习数据结构和算法的课程项目,以及一些简单的排序需求。在实际生产环境中,大多数排序操作可以通过现有的库函数完成,而无需手动实现排序算法。这样的程序适用于需要对一组数据进行排序的场景,比如学生成绩排名、员工工资排序、图书馆图书排序等。用户通过菜单选择排序功能,包括常见的排序算法如冒泡排序、插入排序、选择排序、快速排序等。的文件中,每个数字占据一行。的文件,并在其中输入要排序的数字,每个数字占据一行。为了运行此代码,你需要创建一个名为。示例代码假设数据存储在名为。

走向CTO的路上... 1023

【数据结构】选择排序(详细)

直接选择排序、堆排序、top K问题

Zhuang_N的博客 1515

从零开始:如何用Python手绘波特图并分析电路稳定性

本文详细介绍了如何使用Python绘制波特图并分析电路稳定性,涵盖从基础理论到实际应用的完整流程。通过NumPy和Matplotlib实现频域分析,包括RC低通滤波器和RLC带通滤波器的案例,以及相位裕度计算等高级技巧,为电子工程师提供了一套高效的电路分析解决方案。

hhh00的博客 374

数据结构一一简单选择排序

简单选择排序,基本思想:每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录。 //算法思想:从i(0<=i<n)次比较中,元素i赋值为最小索引与i之后的元素进行 void SelectSort(SqList* L) { int min_index = 0; for (int i=0;iiLength;i++) { min_index

xuanyin235的专栏 937

Codex 命令行高效操作指南

本文详细介绍了Codex命令行工具的高效使用方法,包括安装配置、核心参数解析和实战技巧。通过`codex complete`、`codex explain`等指令,开发者可以快速生成代码、调试错误和重构项目,显著提升开发效率。特别推荐使用`--temperature`和`--max-tokens`参数优化生成结果。

weixin_29201313的博客 532

修改注册表导致开机时电脑显示“无法登陆到你的账户”的问题解决方案

1.问题描述:开机电脑显示“无法登陆到你的账户:通常可以通过从你的账户注销,然后重新登陆来解决问题,如果不立即注销,你创建的任何文件或进行的任何更改都将会丢失。” 2.问题原因:想要修改cmd中的用户名(红色部分),修改了注册表,重启时出现问题。 3.问题解决: win+R输入cmd,确定进入注册表界面,将下面的地址复制进地址栏(你也可以自己按目录查找),双击ProfileImage...

qq_33835957的博客 7万+

【数据结构】选择排序(一)——直接选择排序

本文介绍了排序算法中的直接选择排序算法,主要从算法思想、实例演示、代码实现等方面进行详细讲解。

Jacky_Feng的博客 1万+

Oracle EBS GL日记账批“选定以过账”状态数据修复

日记账来源:应收账款。用户操作过账以后,自动提交请求“过账:单一分类账”一直运行中,该请求执行5,6个小时甚至10多个小时无法完成,导致“标准管理器”阻塞大量请求待定,“冲突解决管理器”的待定数量不断增加。系统管理员不得不把该请求强制取消,此时,日记账批的状态处于“选定以过账”(GL_JE_BATCHES.STATUS为S),如下图 检查此日记账批有3千多条日记账题头,由于日记账比较多,日记账的科目余额计算需要大量服务器资源和执行时间比较长。

陈显平的专栏-Oracle EBS 3245

数据结构与算法之选择排序(含改进版)

选择排序概念 代码实现 时间复杂度 代码改进

努力让自己发光,对的人才能迎着光而来 1万+

深入剖析 Hive 中 CASE WHEN 与 IF 函数的性能差异:解锁高效数据处理的关键

CASE WHEN 函数堪称 Hive 中条件判断的多面手,它具备两种强大的语法形式,以应对各种复杂的业务逻辑。简单 CASE 表达式这种形式适用于对某一列的值进行直接的条件匹配。其语法如下:END例如,我们有一个记录学生成绩的表CASE scoreELSE 'D'搜索 CASE 表达式当业务逻辑需要更灵活的条件判断时,搜索 CASE 表达式便派上用场。它的语法为:CASEENDCASEELSE 'D'

2401_83088008的博客 1125

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 912

数据结构与算法(选择排序算法)

选择排序 选择排序(Selection sort)是一种简单直观的排序算法,他的工作原理如下,首先将未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中急需寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动相关。如果某个元素位于了正确的最终位置上,那它不会移动,选择排序每次交换一对元素,它们当中至少有一个...

sun_xiao_kai的博客 444

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4013

数据结构·选择排序(选择排序、堆排序)

选择排序和堆排序是两种经典的排序算法。选择排序通过多次遍历数组,每次从未排序部分选出最小(或最大)元素并将其放到已排序部分的末尾。堆排序则利用二叉堆的特性,首先将数组构建成最大堆,然后通过不断交换堆顶元素与最后一个元素并重新调整堆,实现排序。这两种算法各有优劣,适用于不同的场景。本文详细介绍了选择排序的核心思想、堆排序的构造大根堆或小根堆的思想并对如何进行升降序排列详细论述。对选择排序和堆排序实现详细的代码。

czy02的博客 1212

C#上位机之海康相机开发(SDK)实战教程

SDK的接口设计遵循“句柄-操作-释放”模式,掌握→→→的流程,就能完成基础开发;工业场景需重点关注稳定性:断连重连、内存管理、抗干扰(网口相机的IP设置、触发信号的可靠性);进阶功能(如图像处理、多相机同步)需结合视觉库(EmguCV)和硬件特性(GPIO触发),但前提是保证基础采集的稳定。建议新手先跑通SDK自带的C#示例,理解每个函数的作用,再逐步替换为自己的代码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2193

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【数据结构排序】选择排序和堆排序(选择排序)

这里写目录标题一级目录二级目录三级目录 一级目录 二级目录 三级目录

Anton的博客 633

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】

【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】

分享学习知识地方 2193

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java数据结构(九)——选择排序、堆排序

本文介绍了两种"选择"排序算法:选择排序和堆排序,堆排序的介绍注重思考过程并画图演示。

xiaokuer_的博客 1475

【数据结构】选择排序:直接选择与堆排序详解

直接选择排序算法与堆排序算法原理讲解,代码实现。

C语言、数据结构、单片机、嵌入式实时操作系统、C++ 学习路径记录 1983

数据结构-排序-选择排序

数据结构-排序-选择排序 1.算法思想 选择排序的思想: 2.算法复杂度 执行时间: O(n^2) 附加空间: 一个存储最小记录的空间 是否是稳定的排序方法: 不稳定 3.算法实现 #include "stdio.h" #define MAXSIZE 10 typedef int keytype; typedef struct { keytype key; }recordtyp...

qq_40731414的博客 291

【数据结构】插入排序、选择排序、冒泡排序、希尔排序、堆排序

生活中我们总是会碰到各种各样的排序,今天我们就对部分常用的排序进行总结和学习,今天的内容还是相对比较简单的一部分,各位一起加油哦!

m0_64826370的博客 937

数据结构 (33)选择类排序

数据结构——选择类排序篇

m0_73399576的博客 582

数据结构与算法:选择排序

数据结构与算法:选择排序 雪柯 大工生物信息 提笔为写给奋进之人 已关注 8 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国忠 特别备注:本书非原创,但部分内容自己会再进行解释,以便更容易理解,重点部分会加粗 目前数据结构与算法已更新文章: 我要自学生信之数据结构与算法:算法简介 本章内容 学习两种最基本的数据结构——数组和链表,它们无处不在。第1章使用了数组,其他各章几乎也都将用到数组。数组是个重要的主题,一定要高度重视!但在有些情况下,使用.

wangprince2017 395

数据结构的运算之选择排序

今天,我们来看看选择排序的相关内容 第一种:简单选择排序 简单选择排序的算法实现: 性能分析: 第二种:堆排序

m0_63932570的博客 225
上一篇: 数据结构之快速排序
下一篇: 数据结构之插入排序
Lefdr
博客等级 码龄9年 16粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值