选择排序

选择排序

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

    昨日写完冒泡排序,和大多数人的感觉一样,太简单,丝毫没有挑战性。但楼主是一个追求踏实平稳的人,希望地基坚固,也为方便后面学习和研究更加高深的算法。但在研究效率上还有待提高,楼主一定好好努力。今天将会写完选择排序 和 插入排序,本文主在选择排序。

一. 算法描写叙述

    选择排序:比方在一个长度为N的无序数组中,在第一趟遍历N个数据,找出当中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出当中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出当中最小的数值与第N-1个元素交换,至此选择排序完毕。

以以下5个无序的数据为例:

56 12 80 91 20(文中仅细化了第一趟的选择过程)

第1趟:12 56 80 91 20

选择排序

第2趟:12 20 80 91 56

第3趟:12 20 56 91 80

第4趟:12 20 56 80 91

二. 算法分析

平均时间复杂度:O(n2)

空间复杂度:O(1)  (用于交换和记录索引)

稳定性:不稳定 (比方序列【5, 5, 3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)

三. 算法实现

//交换data1和data2所指向的整形
void DataSwap(int* data1, int* data2)
{
	int temp = *data1;
	*data1 = *data2;
	*data2 = temp;
}

/********************************************************
*函数名称:SelectionSort
*參数说明:pDataArray 无序数组;
*		   iDataNum为无序数据个数
*说明:    选择排序
*********************************************************/
void SelectionSort(int* pDataArray, int iDataNum)
{
	for (int i = 0; i < iDataNum - 1; i++)    //从第一个位置開始
	{
		int index = i;
		for (int j = i + 1; j < iDataNum; j++)    //寻找最小的数据索引 
			if (pDataArray[j] < pDataArray[index])
				index = j;

		if (index != i)    //假设最小数位置变化则交换
			DataSwap(&pDataArray[index], &pDataArray[i]);
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118370.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SpringBoot 使用 @Transactional 注解配置事务[通俗易懂]

    SpringBoot项目中需要配置事务管理,所以在这里系统地整理下关于@Transactional注解相关的知识!1、详细介绍事务管理是应用系统开发中必不可少的一部分。Spring为事务管理提供了丰富的功能支持。Spring事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代…

  • 2021必看!java电子书合集,值得收藏![通俗易懂]

    2021必看!java电子书合集,值得收藏![通俗易懂]正文作为后端开发,日常操作数据库最常用的是写操作和读操作。读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致SQL变慢。刷脏页脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。那为什么会出现脏页,刷脏页又怎么会导致SQL变慢呢?那就需要我们来看看写操作时的流程是什么样的。对于一条写操作的SQL来说,执行的过程中涉及到写日志,内存及同步磁盘这几种情况。这里要提到一个日志文件,那就是redolog,位于存储引擎层,用来存储物理日志。在写操

  • docker认证_spring 全局异常处理

    docker认证_spring 全局异常处理项目背景:采用SpringCloud+IDEA+Maven搭建了由多个微服务组成的项目,部署上线是在多个阿里服务器里的。问题描述:部署上线过程中,各个微服务都正常启动,而且都注册到了eureka注册中心,但是相互调用时报java.net.UnknownHostException:主机名的错误。问题原因思考:各个微服务是以“主机名:服务名:端口”的形式注册到注册中心。当发布测试时,服务器…

  • 高通工具QXDM、QCAT和QPST的使用[通俗易懂]

    高通工具QXDM、QCAT和QPST的使用[通俗易懂]QXDM,QPST和QCAT是Qualcomm高通公司针对高通芯片的抓包分析工具。QXDM抓包分析,QPST与手机com口连接,QCAT用来分析抓包产生的isf文件(log)。 工具名称 功能 QXDM 关闭打开备份还原NV、NV修…

  • drupal学习教程(待续)「建议收藏」

    drupal学习教程(待续)「建议收藏」1.drupal模块安装a.安装captcha模块–>模块–>用户贡献的模块–>b.启用captcha模块–>模块–>选择–>保存配置c.汉化captcha模块打开https://localize.drupal.org/translate/languages/zh-hans下载captcha汉化包–>配置–>翻译–>导入b.配置capt

  • centos搭建svn 服务器 并同步到web 目录(总结)

    centos搭建svn 服务器 并同步到web 目录(总结)

    2021年10月29日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号