选择排序以及选择排序优化

【排序】选择排序(含优化版) 冒泡排序的时间复杂度为O(n^2),其中n是要排序的元素数量。这是因为冒泡排序需要进行多次遍历,每次遍历都需要比较和交换元素。因此,对于大规模数据的排序,冒泡排序可能不是最有效的选择。选择排序的时间复杂度也是O(n^2),但它的性能通常优于冒泡排序。因为选择排序只需要进行一次遍历,并且只需要进行一次比较和交换操作。因此,在处理大规模数据时,选择排序通常更为高效。但如果遇到已经排好序的数据,冒泡排序只需要循环一次就能发现,并终止,但选择排序却需要继续遍历数组,在这一点上选择排序的效率是不如冒泡排序的。 阅读详情

1.普通选择排序

    //普通选择排序
    public static void sort1(int[] array){
        int count = 0;//统计运行次数
        int cnt = 0; //交换次数
        for(int i=0;i<array.length-1;i++) {
            int min=array[i];
            int minIndex=i;
            count++;
            for(int j=i+1;j<array.length;j++){
                if(min>array[j]) {
                    min=array[j];
                    minIndex=j;
                }
            }
            if(minIndex!=i){
                cnt++;
                array[minIndex]=array[i];
                array[i]=min;
            }


        }
        System.out.println(Arrays.toString(array));
        System.out.println("运行次数:"+count+"次  交换次数:"+cnt);

    }

2.优化选择排序


import java.util.Arrays;
import java.util.Random;

/**
 * 选择排序优化
 */
class SelectionSort2 {
    public static void main(String[] args) {
        //产生一个随机数组
        Random r = new Random();
        int arr[] = new int[2000];
        for(int i=0;i<arr.length;i++){
            arr[i] =r.nextInt(1000);
        }

//因为本优化版本每次循环找出最大以及最小值,所以执行执行:arr.length/2
        int ArrLength = (arr.length/2);
        int  temp1,temp2;
        long count = 0;
        //记录开始时间
        long startStamp = System.currentTimeMillis();
        //算法开始
        for(int j=0;j<ArrLength;j++){
            int minIndex = j;
            int maxIndex= j;
            for(int i=j;i<arr.length-j;i++){
                if (arr[minIndex] > arr[i]) {
                    minIndex = i;
                }
                if (arr[maxIndex] < arr[i]) {
                    maxIndex= i;
                }
                count++;
            }
            temp1  = arr[minIndex];
            arr[minIndex] = arr[j];
            arr[j] = temp1;

            if(j!=maxIndex) {	//maxIndex不能再原本的minIndex位置上
                temp2 = arr[maxIndex];
                arr[maxIndex] = arr[arr.length - j - 1];
            }else{
                temp2 = arr[minIndex];
                arr[minIndex] = arr[arr.length - j - 1];
            }
            arr[arr.length - j - 1] = temp2;
        }
        //计算算法结束时间
        long endStamp = System.currentTimeMillis();
        System.out.println("用时总长:"+(endStamp-startStamp));
        System.out.println("循环次数:"+count);


        System.out.println(Arrays.toString(arr));
    }
}

冒泡排序和选择排序以及选择排序的优化 冒泡排序:两个相邻的数据两两相比,如果是从小到大排列,将较大的数据换位到较小数后面,这样第一轮结束,最后一个数据是最大的数据,因为总是把较大的数据换到后面,再进行第二轮,第三轮(此时已经排好序的数据可以不再参与排序,提高效率)......当第二个数据确定时,第一个数据也就确定了,排序结束。大圈套小圈思想,外层循环控制次数,内层循环控制比较的数据。       选择排序和冒泡会用到数据的位置交换, 阅读详情

相关推荐

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1116

十大经典排序算法之选择排序及其优化

一、简单选择排序 1.基本思想: 在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换; 第二次遍历n-2个数,找到最小的数值与第二个元素交换; 。。。 第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。 2.过程 3.代码 public static void selectSort(int[] arr) { int minNum = 0; int temp = 0; int a = 0; for (i

Kevinnsm的博客 1220

第二十届全国大学生智能车竞赛-地瓜机器人智慧医疗挑战赛技术解析与实战指南

本文深入解析了第二十届全国大学生智能车竞赛-地瓜机器人智慧医疗挑战赛的核心技术。内容涵盖从零搭建数字孪生环境、实现AI视觉任务(二维码识别、引导线追踪、目标检测)、在边缘设备部署轻量化大模型进行图生文描述,到遥操作与自主控制的平滑切换,并提供了基于ROS2的系统集成与赛场实战指南,助力参赛者高效备赛。

weixin_29252171的博客 2769

排序算法(一):选择排序算法及其优化分析

目录 1.选择排序算法: 2.选择排序的优化分析 3.时间复杂度分析: 3.1优化前 3.2优化后 4.空间复杂度分析: 1.选择排序算法: 选择排序是不稳定的算法:选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元...

AI_drag0n的博客 645

CocosCreator视频播放黑屏?手把手教你封装VideoPlayer组件解决Web环境问题

本文针对Cocos Creator在Web环境下视频播放黑屏等常见问题,提供了一套工程化的VideoPlayer组件封装解决方案。文章深入剖析了浏览器自动播放策略、DOM样式隔离等核心挑战,并手把手教你实现一个健壮的管理器,涵盖兼容性处理、性能优化与内存管理,确保视频播放稳定流畅。

plum99的博客 598

Nvidia Isaac Sim安装与配置 入门教程 2024(2)

Isaac Sim 安装和配置教程将指导用户完成从下载软件到设置和运行仿真的全过程。教程内容包括安装必要的依赖项、配置系统环境、配置Omniverse环境以及调试和优化仿真环境的步骤。通过详细的操作步骤和图文并茂的说明,用户可以快速上手 Isaac Sim,构建出高质量的机器人仿真环境,实现其研究和应用目标。

m0_56661101的博客 2万+

选择排序及优化

目录 一、普通实现 二、模板实现 三、优化版本一 四、优化版本二 和冒泡排序区别:冒泡排序是逐步对相邻元素进行操作(比较和交换位置)。而选择排序是从待排序数列中选择最大/小值,再将之放置到已排序数列中。 (有序区,无序区)。在无序区里找一个最小的元素跟在有序区后面。对数组:比较的多,换的少。 选择排序思路: 1、在未排序序列中找到最小(大)元素,...

幻欢子 3197

异常数据处理——3σ原则、箱线图

异常数据处理——3σ原则、箱线图 用不包括异常值的剩余数据的均值替换、删除DataFrame中某列有异常值的整行等方法

杨老师的小跟班(*∩_∩*) 9032

图解选择排序算法及优化

3分钟学会选择排序算法及其优化

chenchenchencl的博客 7020

酒店前台pms管理系统

对于酒店经营者来说,选择一款优秀的管理系统,是提升运营效率、优化客人体验的关键。PMS酒店管理系统凭借其强大的房态管理、实时数据监控、OTA直联、无人值守等功能,已经成为许多酒店提升管理水平的得力助手。无论是大中型酒店,还是小型民宿,PMS系统都能根据不同需求提供量身定制的解决方案,帮助酒店实现精细化管理、提高运营效率。如果你也在为酒店管理中的繁琐琐事而困扰,不妨尝试一下PMS酒店管理系统,感受科技带来的便利与高效,让你的酒店运营更上一层楼!

2409_89897808的博客 2482

视觉测量实战:C#上位机+OpenCVSharp 实现工业零件尺寸自动检测(精准像素级,工业级可落地)

本次开发的上位机界面遵循工业现场操作规范简洁、直观、按钮大、文字清晰、参数可视化调节,操作人员为车间工人/质检员,无需复杂操作,所有控件均为WinForms原生控件,拖拽即可完成布局本次实战完成了C#上位机+OpenCVSharp 工业零件尺寸自动检测系统的完整开发,这套方案是工业视觉测量的标准落地方案,适配95%的规则几何零件的尺寸检测场景,从五金件、塑胶件到电子元件,全覆盖无死角。测量效率提升100倍、精度提升10倍、无人工误差、可适配流水线实时检测。

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

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){ ...

zhao_miao的博客 1088

微信小程序 - 解决请求报错 request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID

微信小程序报错“request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID“,微信小程序请求报错,微信小程序errcode:-201,服务器报错,无法调用接口,微信小程序真机https请求失败,微信小程序wx.request接口报错,小程序真机调试运行接口都报错了,真机测试下网络请求都不行了且报错,证书没问题依旧报错,检查HTTPS证书,ssl证书,使用浏览器测试访问证书是正常的,不是证书问题,请

🏆 前端领域优质创作者 1万+

选择排序及选择排序的优化

package com.Summer_0421.cn; import java.util.Arrays; /** * @author Summer * 选择排序 * 通过记录下标值,优化选择排序 */ public class Test06 { public static void main(String[] args) { int[] array = {18, 34, 79,...

weixin_44458686的博客 762

OV9734 DATASHEET,完整规格书

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

选择排序和优化选择排序

直接入题。 先来看几张图片。 下面是当初我上学时老师所讲,今天我翻来研究一下,发现所谓的优化并不是太明显。 1.选择排序 为了能方便的计算时间,把最后的遍历数据也一并加了进去。 第一次测试 第二次测试......   2.优化选择排序 第一次测试 第二次测试....... 。。。。。。华丽丽的分割线。。。。。。。 经过连续几十次的测试发现: 1.在数据量较...

weixin_41573005的博客 1506

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

选择排序及其优化方案

选择排序 基本思想 运行轨迹 代码实现 性能分析 优化方案 1、基本思想这是一种思路最简单的排序算法。①、找到数组中最小的那个元素 ②、将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换) ③、在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置 ④、重复执行③,直到将整个数组排序。为什么叫选择排序?就是因为它在不断地选择剩余元素之中的最小者。2、运行轨迹3、

TinyDolphin的博客 1975

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

选择排序的优化

还是来自之前教程视频中的选择排序这节。即给一数组从小到大排序 先贴上老师的代码`package Sorting; import java.util.Arrays; public class Selectsorting { public static void main(String[] args) { // TODO Auto-generated method stub int[] s = new int[] {101,34,119,1,-1,90,123}; selectsort(s); Syst

weixin_47535434的博客 317

【排序】选择排序及优化

我们常用的十大排序算法:选择排序、冒泡排序、插入排序、堆排序、希尔排序 、归并排序、快速排序、桶排序、计数排序、基数排序。 今天实现的是选择排序的算法。 package com.jandmin.demo.leetcode.sort; import java.util.Random; /** * @description: 排序算法: * 用第一个位置...

JandMin的博客 348

选择排序及其优化

一般的选择排序 public void selectionSort(int[] a) { int minIndex; // 记录每一轮的最小值索引 for (int i = 0; i < a.length - 1; i++) { // 选出最小值赋给 a[i],a[i] 前面的数都已排好序 minI...

FengZH的博客 1098

python 选择排序及其优化

部分转自https://blog.youkuaiyun.com/Dby_freedom/article/details/82154869 介绍 : 选择排序是一个很容易理解和实现的简单排序算法. 学习它之前首先要知道它有两个很鲜明的特点 1. 运行时间和输入无关 选择排序,是通过每次选择最小的数或者最大的数,然后将它放在它应该出现的位置上。 ...

Yang8465的博客 618

java选择排序优化

选择排序工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 时间复杂度:O(n²) 空间复杂度:O(1) 稳定性:不稳定。 算法如下: import java.util.Arrays; import java.u...

哔哔herry的博客 569

【排序】选择排序及其优化

void SelectSort(int* array, int size) { //size-1:每次都会排好一个数据,所以每次都需要进行-1 for (int i = 0; i < size - 1; i++) { //用maxPos标记最大的数据 int maxPos = 0; //size-i:后面数据已经排好序了,...

金金金金金的博客 570

选择排序算法的实现和优化

,通过n-1次关键字的比较,从第n个记录中选出关键字最小的记录,并和第一个记录进行交换,通过n-2次关键字的比较,从第n-1个记录中选出关键字最小的记录,并和第二个记录进行交换…,通过n-i次关键字的比较,从n-i+1个记录中选择出关键字最小的记录,并和第i个记录进行交换反复进行上述步骤,经过n-1趟选择排序,将把n-1个记录排到位,最后剩下的那个元素同样已经就位,所以共需进行n-1趟选择排序将数组分为两个子集,排序的和未排序的,每一轮从未排序的子集中选出最小的元素,放入排序子集,重复上述步骤,直至整个数组

m0_64365419的博客 3148

选择排序的双选优化

文章目录先整清楚选择排序什么是选择排序?手写一个选择排序选择排序和冒泡排序有什么区别?算法优化最大值和最小值每轮比较只能得其一吗? 先整清楚选择排序 什么是选择排序? 矮子里面挑将军——双重循环遍历数组,每经过一轮比较,找到最小元素的下标,将其交换至首位,下次排序时它就不参与排序了,而是从剩余的数据中挑选最值。 手写一个选择排序 目标数组:{1, 0, 3, 8, 7, 2, 0, 5, 4, 6} 目标结果:顺序升序排序 public static void selectionSort() { int

D_ps19990501的博客 1015

简单选择排序及其优化

简单选择排序,对n个记录进行扫描,选择最小的记录,将其放在第一个位置,接着在剩下的n-1个记录中扫描,选择最小的记录将其放到第二个位置,不断重复这个过程,知道剩下最后一个记录为止。 示例代码: //简单选择排序方法 public static void selectSort(int[] array, int length) { int i,j,min,temp; for (i=0; i&l...

星空 1023

选择排序的算法和优化

正常的选择排序 选择排序是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。   分为三步:   ①、从待排序序列中,找到关键字最小的元素   ②、如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换   ③、从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束 代码如下 1 packa...

weixin_33890526的博客 295
上一篇: 微信课程表小程序(0基础教你用,从入门到发布)
下一篇: 顺序查找以及带哨兵的顺序查找java版本
热爱编程的小白白
热爱编程的小白白 新星计划导师 新星计划导师
博客等级 码龄5年 11万+粉丝 243原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱编程的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值