package com.heu.wsq.basic.sort_algorithm;
/**
* 选择排序
* @author wsq
* @date 2021/4/16
* 选择排序(Selection-sort)是一种简单直观的排序算法。
* 首先,找到数组中最小的那个元素,其次将它和数组的第一个元素交换位置。
* 再次,再从第二个元素开始寻找最小的那个元素,然后将它与数组的第二个元素交换位置
* ...
* 同理。
*
* 选择排序的两个特点:
* 1. 运行时间和输入无关(纵使是有序递增的序列,也要经过这个流程去扫描)
* 2. 数据移动是最少的
*/
public class SelectionSort {
public void sort(int[] nums){
int n = nums.length;
// 外层循环,表示需要几次进行 (选值,交换)的过程,一共进行n-1就可以了
for(int i = 0; i < n - 1; i++){
// min 来保存当前序列中的最小值
int min = Integer.MAX_VALUE;
// pos 来保存最小值元素对应的索引
int pos = -1;
// 寻找 从 i 到 n 最小的元素
for(int j = i; j < n; j++){
if(nums[j] < min){
pos = j;
min = nums[j];
}
}
// 交换 i 和 最小值元素对应索引 pos
swap(nums, i, pos);
}
}
private void swap(int[] nums, int i, int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
public static void main(String[] args) {
SelectionSort selectionSort = new SelectionSort();
int[] nums = {3, 2, 5, 8, 9, 0, 1, 6, 6};
selectionSort.sort(nums);
for (int i = 0; i < nums.length; i++){
System.out.print(nums[i] + " ");
}
}
}
相关推荐
CYUSB3065配置CMOS
按照OG02B10的时序电路,在通过SCCB配置CMOS之前,需要三个电源上电,Xshutdown高电平和配置时钟电路。找到手册的第6章SCCB(跟IIC很像),可以看到SCCB的地址与SID引脚有关,这个需要到硬件原理图上确认下。这是Cypress的一个支持MIPI和UVC的模块,有例程支持OV5640,现在要替换替换成OG02B10。寄存器参数需要找到厂家的FAE,由他们提供,OG02B10的资料已经上传。(2)参考得宏的电路,时钟由主控提供,目前程序未实现。这里有两个重要参数需要搞定,摄像头的。
初级排序算法之选择排序
一、选择排序 首先在未排序中找出最小的元素,存放到排序序列的起始位置,然后再从剩余的未排序序列中选出最小的元素 放在已排序的末尾(未排序的首位) 二、选择排序的特点 1、选择排序对文件本身的顺序依赖很低,运行时间与输入无关 2、长度为N的序列,最多需要比较N次,数据移动是所有排序算法中最少的 3、比较次数是N(N-1)/2 4、赋值操作介于0~3(N-1) 5、时间复杂度 O(N²
汽车ECU诊断入门:手把手教你用UDS协议(ISO14229)读取和清除故障码
本文详细介绍了如何使用UDS协议(ISO14229)进行汽车ECU诊断,包括故障码读取与清除的完整流程。从诊断环境搭建、UDS协议基础到实战案例分析,手把手教你掌握0x19诊断服务、安全访问机制等核心技能,适用于汽车电子工程师和诊断开发人员。
基本算法-选择排序
本文介绍一种经典排序算法——选择排序法。
LightTools中VBA宏的编写入门
LightTools和VBA联动
如何理解反步法设计控制器?
假设以二阶系统为例,被控对象的系统状态方程为: 基于反步控制的具体方法如下: 1.1步骤一 定义期望状态为xd,状态误差e1,为: e1=x1-xd; 则e1的导数为: 1.2步骤二 定义虚拟控制量为: e2定义为: 1.3步骤三 定义Lyapunov能量函数为: 1.4步骤四 定义总Lyapunov能量函数为: 因此设计的控制律为: 设计c>0,则: 满足Lyapunov的稳定性判定条件...
排序算法(二):选择排序
选择排序是一种简单、易理解的排序算法,适合用于学习排序的基本思想。尽管它的时间复杂度较高,适用于小规模数据排序,但在实际应用中,可以根据不同场景选择更高效的排序算法,如快速排序或归并排序。通过本文的分析和代码示例,希望大家能够深入理解选择排序的工作原理,能够在需要的场合灵活运用它,并为进一步学习其他排序算法打下坚实的基础。选择排序虽然简单,但它依然是计算机科学中不可忽视的经典算法之一。希望你在学习排序算法的过程中,能够通过这篇文章掌握选择排序的精髓。
ZYNQ AXI DMA零拷贝实战:用mmap在用户空间玩转高速数据流(基于Petalinux 2020.2)
本文详细介绍了在ZYNQ平台上使用AXI DMA和mmap技术实现零拷贝数据传输的实战方法。基于Petalinux 2020.2环境,通过内核配置、设备树修改和用户空间库设计,大幅提升PS与PL之间的数据传输效率,特别适用于高清视频流、高速AD采样等高性能场景。
详解选择排序(java实现)
一.选择排序原理 将要排序的数据元素选出最小(大),将他和数据元素的首位交换位置。再次从剩下的数据元素中 找到最小(大)的元素,然后与数据元素的第二位子交换。。。直到将整个数据元素排序。 总之他在不断选择剩余元素的最小值,然后放在恰当的位置。 二.选择排序特点 1.运行时间和输入无关。 为了找出最小的元素,遍历整个数组并不能为下一次遍历提供信息。这样的缺点是:一个...
功能安全实战系列07-英飞凌TC3xx电源监控开发详解
本文对电源监控(PBIST及MONBIST)开发介绍,步骤详细配合开发中的测试情况,图文并茂,方便理解。
移位寄存器——用Verilog实现串入串出、串并和并串转换并进行Modelsim仿真
用Verilog实现串并转换 首先我们先要了并串和串并转换的原理 并串转换:先将八位数据暂存于一个八位寄存器器中,然后左移输出到一位输出端口,这里可以通过一个“移位”来实现,相当于实现了移位寄存器的功能。 串并转换:新输入的位值成为原来数据的最低位,将原来数据的最高位舍去,这里可以通过一个简单的“连接符”来实现。 我们这里采用两种方式来进行串并转换 一:lsb优先 Least Significant Bit,最低比特,最低位优先 二:msb优先 Most Significant Bit,最高比特,
排序——选择排序
前面的文章介绍了排序的概念,插入排序和交换排序,这篇文章则介绍一下选择排序的相关内容。
AI驱动的网络安全运维:智能化时代的安全保障
本项目旨在使用Python和AI技术构建一个智能化的网络安全运维系统,能够实时监测网络流量,检测潜在的安全威胁,并自动采取应对措施,从而提升网络安全管理的效率和准确性。具体内容包括:环境配置与依赖安装数据采集与预处理机器学习模型构建与训练实时威胁检测与响应实际应用案例通过本文的介绍,我们展示了如何使用Python和AI技术构建一个智能化的网络安全运维系统。
排序算法:选择排序(直接选择排序、堆排序)
使用C语言实现的选择排序算法和堆排序算法,详细讲解了选择排序的实现逻辑,包含两个排序算法的完整代码,以及两个算法的效率比较。
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
选择排序(选择排序,堆排序)
两种选择排序!
SIMATIC S7-1200, S7-1500 PID 控制[手册]
SIMATIC S7-1200, S7-1500 PID 控制[手册]
选择排序之简单选择排序
选择排序的原理:选择排序的主要操作是选择,主要思想:每趟排序在待排序序列中选择最小的元素记录,添加到有序序列中。选择排序主要有简单选择排序(直接选择排序)和堆排序,堆排序算法可以看作是简单选择排序算法的改进;这里主要介绍简单选择排序算法。...
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
选择类排序法 — 简单选择排序
9.4 选择类排序法 选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。我们主要介绍简单选择排序、树型选择排序和堆排序。 简单选择排序 简单选择排序的基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止
选择排序 简单选择排序 直接选择排序的区别
选择排序 图示过程如下:
排序之选择排序
一、直接选择排序 原理: 每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据元素排完 。 代码实现: public void selectSort(int[] arr) { for(int i = 0;i < arr.length;i++) { int maxPos = 0; fo...
简单选择排序与直接选择排序
是对元素直接排序 而先获取到元素的最大值或最小值下标再进行交换每次遇到n-1>n 的时候就要发生交换;则只是记录下较大那个元素的位置,这样一轮过后这个记录变身本轮所要选取的最大值,而每轮需要确定的位置已由外层循环确定,只需将最大元素位置记录所对应的元素与要确定的位置交换机可。话不多说直接上代码演示。
选择排序和二元选择排序
选择排序 思想: 在一个数组中,找到最小的数放在最前面,然后再在剩下的数中找到最小的放到第二位....以此类推 代码实现: #include<iostream> using namespace std; void swap(int& x, int& y)//交换函数 { int temp = 0; temp = x; x = y; y = temp; } v...
选择排序(简单选择排序和堆排序)
选择排序的基本思想:每一趟(例如第i趟)在后面n-i+1(i=1,2,…n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下了1个,就不用再选了。 1.简单选择排序 简单排序算法思想:假设排序表为L[1…n],第i趟排序即从L[i…n]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序。代码如下: #include<cstdio> #include<iostream
Java版本的选择排序及选择排序的优化
选择排序及选择排序的优化C语言版 public class SelectSort{ public static void main(String[] args) { int[] arr = new int[]{10,2,5,4,6,9,3,1,0}; System.out.print("排序前:"); for(int i:arr){ ...
2943



被折叠的 条评论
为什么被折叠?



