选择排序及优化

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

选择排序思想:

在一组数据中,每一次遍历找到最大值(或者最小值),将它与最后一个数据(或者第一个数据)交换位置,每一趟确定一个数据的最终位置。

一:代码如下:
#define _CRT_SECURE_NO_WARNINGS_ 1
// 选择排序,每次选出最大值放在最后的位置
#include<stdio.h>
void Swap(int *p1, int *p2)
{
   int tmp = 0;
   tmp = *p1;
   *p1 = *p2;
   *p2 = tmp;
}

void select_sort(int arr[],int sz)
{
     int i = 0;
     int j = 0;
     int tmp = 0;
     for(i=0; i<sz-1; i++)
     { 
       int maxpos = 0;   // 假设最大的数是下标为0的数
       for(j=1; j<=sz-i-1; j++)     //  中间的判断条件需要格外注意! j表示的是下标,不要从循环次数方面考虑,由于已经假设了下标是0对应的数最大,所以下标可以从1到sz-1变化
       {
           if(arr[j]>arr[maxpos])
           {
                maxpos = j;
           }                        
       }
       if(maxpos!=sz-1-i)  //最后一个数不是最大值时,交换
       {
            Swap(arr+maxpos,arr+(sz-1-i)); //和最后一个值交换 
       }                
     }
}

void print_arr(int arr[],int sz)
{
   int i=0;
   for(i=0; i<sz; i++)
   {
     printf("%d ",arr[i]);
   }
   printf("\n");
}


int main()
{
    int arr[9]={9,2,7,5,3,4,1,6,8};
    int sz = sizeof(arr)/sizeof(arr[0]);
    //select_sort(arr,sz);
    select_sort_op(arr,sz);
    print_arr(arr,sz);
    return 0;
}


选择排序的优化:每一趟同时选出最大值和最小值,把最小值和第一个数据交换,最大值和最后一个数据交换。

二:代码如下:
#define _CRT_SECURE_NO_WARNINGS_ 1
// 选择排序,每次选出最大值放在最后的位置
#include<stdio.h>
void Swap(int *p1, int *p2)
{
   int tmp = 0;
   tmp = *p1;
   *p1 = *p2;
   *p2 = tmp;
}

void select_sort_op(int arr[],int sz) // 选择排序优化:循环一次 找到最大值和最小值,把最大值放在最后,把最小值放到最前面
{

    int left = 0;   //最左边数据下标
    int right = sz-1;  //最右边数据下标
    while(left<=right)
    {   
        int i = 0;
        int maxpos = left;     //假设第一个数对应的下标(0)是最大值
        int minpos = left;     //假设最小值下标也是0
        for(i=left+1; i<=right; i++)   // 循环一次  选出最大值和最小值
        {
           if(arr[i] > arr[maxpos])
           {
               maxpos = i;
           }
           if(arr[i] < arr[minpos])
           {
               minpos = i;
           }        
        }       
        if(minpos != left)
        {
           Swap(arr+minpos,arr+left);   
        }
        if(maxpos == left)           //952316874
        {
           maxpos = minpos;
        }

        if(maxpos != right)
        {
           Swap(arr+maxpos,arr+right);
        }
        left++;
        right--;    
    }
}


void print_arr(int arr[],int sz)
{
   int i=0;
   for(i=0; i<sz; i++)
   {
     printf("%d ",arr[i]);
   }
   printf("\n");
}


int main()
{
    int arr[9]={9,2,7,5,3,4,1,6,8};
    int sz = sizeof(arr)/sizeof(arr[0]);
    //select_sort(arr,sz);
    select_sort_op(arr,sz);
    print_arr(arr,sz);
    return 0;
}
冒泡排序和选择排序以及选择排序的优化 冒泡排序:两个相邻的数据两两相比,如果是从小到大排列,将较大的数据换位到较小数后面,这样第一轮结束,最后一个数据是最大的数据,因为总是把较大的数据换到后面,再进行第二轮,第三轮(此时已经排好序的数据可以不再参与排序,提高效率)......当第二个数据确定时,第一个数据也就确定了,排序结束。大圈套小圈思想,外层循环控制次数,内层循环控制比较的数据。       选择排序和冒泡会用到数据的位置交换, 阅读详情

相关推荐

优化冒泡排序和选择排序

冒泡排序和选择排序均用两种方法实现,原始方法和在原始方法上的改进和优化,对应博客地址:http://blog.youkuaiyun.com/ns_code/article/details/20065107

【排序算法】选择排序(C语言)

选择排序是最简单的算法之一,这里使用C语言实现了选择排序,并且完成了选择排序的优化实现,欢迎大家参考

weixin_52811588的博客 9万+

全国职业院校技能大赛-大数据应用赛项-数据挖掘-01

-----------------------推荐Top5结果如下--------------------------------------------第一条数据前10列结果展示为:----------------------------------------相同种类前10的id结果展示为:--------------------相似度top5(商品id:14,平均相似度:0.522356)相似度top1(商品id:1,平均相似度:0.983456)若属于该spu_id,则内容为1否则为0。

Eternity_04的博客 1951

【C语言】【选择排序及其优化】

选择排序是指:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾,,直到全部待排序的数据元素的个数为零。

Legend_6zh的博客 354

【RTOS】 Vxworks 653 第一章 —— 初识 vx653 3.x

。。不是很重要,自己搜吧鲁棒分区是一种确保共享计算资源中独立运行功能实现​​时空隔离​​的机制,其目标是为集成模块中的混合临界性应用提供与联邦式部署(federated implementation)同等级别的功能隔离保障。具体表现为:​​多关键性共存​​:支持不同安全等级应用(如飞控系统A级与娱乐系统D级)在同一模块中协同运行。​​抗干扰能力​​:防止未授权或意外的时空干扰(如内存越界、时间窗口冲突),确保应用间互不影响。​​。

qq_38183694的博客 1279

RS485设备联网避坑指南:塔石串口服务器在MODBUS平台中的3个关键配置项

本文针对塔石串口服务器在MODBUS物联网平台接入中的常见问题,详细解析了三个关键配置项:工作模式选择、远程端口与保活机制、寄存器映射与轮询策略。通过对比错误与正确配置案例,帮助工程师避开配置陷阱,实现RS-485设备的稳定、高效联网,提升批量部署的成功率与系统可靠性。

weixin_29281941的博客 404

选择排序及其优化

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

FengZH的博客 1098

数据挖掘在人力资源分析中的实战案例

在当今竞争激烈的商业环境中,人力资源管理对于企业的成功至关重要。有效的人力资源管理能够提高员工绩效、降低员工流失率、优化人才招聘等。而数据挖掘技术为人力资源管理提供了强大的工具,通过对大量人力资源数据的分析,可以发现潜在的规律和模式,为企业的决策提供有力支持。本文的目的是通过实际案例展示数据挖掘在人力资源分析中的具体应用,涵盖员工绩效预测、人才招聘筛选、员工流失分析等多个方面。通过详细的案例分析,帮助读者理解数据挖掘技术在人力资源管理中的实际操作和应用价值。

移动开发前沿的博客 489

直接选择排序的C语言代码(优化)

在此抛砖引玉,让大家一起讨论一下这两个代码的区别。并且为什么第一个代码的出现率要远比第二个高。

Maric_CJ的博客 263

AI测试:手把手教你用AI做桌面自动化「喂饭教程」

本文介绍了基于MCP协议的DesktopCommanderMCP自动化工具,通过自然语言指令实现桌面操作。系统采用客户端-服务器架构,支持应用程序管理、文件操作、屏幕控制等功能。详细说明了环境搭建步骤,包括Python和Node.js依赖安装、API密钥配置及MCP服务部署。通过实战案例展示了文件整理、批量截图等典型应用场景,并分享了任务描述优化、权限控制等最佳实践。该方案能显著提升重复性桌面操作的效率,让AI成为智能办公助手。

blues_C的博客 851

1-Wire 单总线硬件结构及软件时序分析(实测波形+C代码分析)

1根线就可以通信,是不是很神奇?因为其节省I/O口的优点而被广泛使用!

记得诚 1万+

选择排序(附代码详解)(C语言)

排序算法之详解选择排序法

2301_77509762的博客 1万+

WorkBuddy KiCad 实战:国产 AI 搭子不只会写代码,传感器板从零走到可审查

真正可用的 PCB 教程不能承诺“一键打样”。本课把 WorkBuddy 放在需求拆分、文件生成和审查记录的位置,KiCad 负责 ERC、DRC 与制造文件,工程师负责最终判断。 本课不会用“AI 一键完成”制造错觉,而是把 WorkBuddy、KiCad 8.0、Python 3.11 与人工审阅组成一条可复现链路。你会从“已确认的接口表、器件库来源、板框与电源方案”出发,得到“KiCad 工程、原理图、初始 BOM、ERC 报告与审查记录”,并学会用真实命令、错误信号和停止条件判断成果能不能进入下一阶

yueyeguzhuo的专栏 198

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的博客 1085

【DDR5 PCB走线SI/PI仿真调试】详细全攻略

问题场景发现症状优化措施过孔Stub效应TDR波形尖峰,信号反射严重使用盲孔,背钻减少Stub,降低Via数量串扰过大眼图闭合,误码率增加增加走线间距,插入地线隔离,减少平行长度电源阻抗过高PDN谐振导致纹波大多频率去耦,靠近电源引脚布置多档电容,合理分层信号时序失配优化走线长度匹配,避免信号走线跨层跳变DDR5设计不仅是硬件的挑战,更是仿真能力的考验。掌握SI/PI仿真,理解信号背后的物理本质,才能真正把握高速接口的“灵魂”!

weixin_43199439的博客 987

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

选择排序和优化选择排序

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

weixin_41573005的博客 1506

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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的博客 757

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

选择排序及其优化方案

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

TinyDolphin的博客 1975

选择排序的优化

还是来自之前教程视频中的选择排序这节。即给一数组从小到大排序 先贴上老师的代码`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

图解选择排序算法及优化

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

chenchenchencl的博客 7020

java选择排序优化

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

哔哔herry的博客 569

python 选择排序及其优化

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

Yang8465的博客 618

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

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
上一篇: 顺序表的相关操作
下一篇: 静态通讯录
Name_seven
博客等级 码龄9年 12粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值