首页 > 编程语言 >排序算法 选择排序 SelectSort -- C语言实现

排序算法 选择排序 SelectSort -- C语言实现

时间:2024-08-06 18:07:36浏览次数:12  
标签:mini begin end SelectSort -- int maxi 排序

选择排序

描述

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了。

算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

代码实现

/*交换函数*/
static void Swap(int *p1, int *p2)
{
	int tmp = 0;
	tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}


void SelectSort(int *a, int n)
{
	int begin = 0; int end = n - 1;
	int maxi = begin; int mini = begin;
	while (begin < end)
	{
		//循环一轮 
		for (int i = begin + 1; i <=end; i++) //找最大最小数 的下标
		{
			if (a[i] < a[mini])
			{
				mini = i;
			}
			if (a[i] > a[maxi])
			{
				maxi = i;
			}
		}
		//找到后交换,[mini]要到begin位置
	Swap(&a[begin], &a[mini]);
	if (maxi == begin)  //如果maxi刚好处于begin,mini回到begin后,maxi被交换到原来mini的位置,需修正
	{
		maxi = mini;
	}
	Swap(&a[end], &a[maxi]);
	//最后再缩小范围
	begin++;
	end--;
	}
}

/*每一轮比较从begin+1开始 , end+1结束(要和end比)*/

标签:mini,begin,end,SelectSort,--,int,maxi,排序
From: https://www.cnblogs.com/DSCL-ing/p/18344191

相关文章

  • 被怼了:acks=all消息也会丢失?
    消息队列是面试中一定会被问到的技术模块,虽然它在面试题占比不及并发编程和数据库,但也属于面试中的关键性问题。所以今天我们就来看一道,MQ中高频,但可能会打破你以往认知的一道面试题。所谓的关键问题指的是这道面试题会影响你整体面试结果。我们在面试消息队列(MessageQueue,M......
  • 蒙特卡洛模拟(5)————导弹追踪问题
    本章会介绍如何用数值模拟的方法解决导弹追踪问题目录一、问题提出二、建立示意图三、模型建立1.建立坐标轴(1)建立B船坐标(2)建立导弹坐标2.设置delta_t,进行模拟四、代码求解1.预备知识(1)mod(m,n)(2)axis([mnpq])(3)text(m,n,'xxx')2.变量初始化3.初始化画图参数4.进入循环,开始模拟(1)进......
  • 正本清源:TCP协议之三次握手和四次挥手
    一、三次握手的原理通俗解释:1>客户端发送一条请求到服务端(通过TCP报文,其中标记位是SYN),问:我可以跟你建立连接吗?--第一次握手2>服务端收到了客户端发来的请求连接的报文,回复给客户端一个确认信息同意建立连接(标记为ACK),同时发送连接请求到客户端,问:我服务端可以和你客户端建......
  • 机器学习中的两个重要函数--sigmoid和softmax
    机器学习中,常常见到两个函数名称:sigmoid和softmax。前者在神经网络中反复出现,也被称为神经元的激活函数;后者则出现在很多分类算法中,尤其是多分类的场景,用来判断哪种分类结果的概率更大。本文主要介绍这两个函数的定义,形态,在算法中的作用,以及两个函数之间的联系。1.sigmoid函数......
  • java解一些算法题
    题目描述某部门计划通过结队编程来进行项目开发,已知该部门有N名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程。结队分组规则如下:从部门中选出序号分别为i、j、k的3名员工,他们的职级分别为level[i],level[j],level[k]结队小组需满足level[i]<le......
  • NFS-Ganasha 高可用配置
    1.安装所需的软件源yumconfig-manager--set-enabledol9_addons2.安装所需的软件yuminstall-ypacemakercorosyncpcs3.编写corosync配置文件文件路径:/etc/corosync/corosync.conftotem{version:2cluster_name:myclustertransport:udpu}nod......
  • Mac开发基础23-NSMenu
    NSMenu是macOS应用中的一个重要控件,用于创建应用程序的菜单。这些菜单通常出现在屏幕顶部的菜单栏中,但也可以作为上下文菜单出现。NSMenu和NSMenuItem协同工作,NSMenu是菜单容器,而NSMenuItem是菜单项。本指南将详细介绍NSMenu的常见API和基础技巧。基本使用创建和初......
  • 抢先体验iOS 18开发者预览版Beta 5已发布怎么升级
    苹果今日向iPhone和iPad用户推送了iOS/iPadOS18开发者预览版Beta5更新(内部版本号:22A5326f),距离上次发布Beta/RC间隔7天。此次引入了更新设计的Photos应用程序以及全新的Safari选项等,并优化了很多细节。由于之前的相册大改版备受吐槽,苹果公司这次收集用户对Photos应用的反......
  • c语言11天笔记
    函数的概述函数:实现一定功能的,独立的代码模块。我们的函数一定是先定义,后使用。使用函数的优势:1.我们可以通过函数提供功能给别人使用。当然我们也可以使用别人提供的函数,减少代码量。2.借助函数可以减少重复性的代码。3.实现结构化(模块化)程序设计思想:结构化程序设......
  • Springboot计算机毕业设计电影推荐网站0unwo
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,电影分类,电影信息,通知公告,电影资讯开题报告内容一、研究背景与意义随着互联网技术的飞速发展,在线娱乐已成为人们日常生活中不可或缺的一部分。电影作为......