选择排序

选择排序

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

一. 算法描写叙述

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

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

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

第1趟:12 56 80 91 20

<span>选择排序</span>

第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/119266.html原文链接:https://javaforall.cn

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

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

(0)
blank

相关推荐

  • 手机怎么模拟125k卡_手把手教你用手机NFC秒变门禁卡,这个方法多种手机都可以适用…

    手机怎么模拟125k卡_手把手教你用手机NFC秒变门禁卡,这个方法多种手机都可以适用…现在只要手机支持NFC功能,手机秒变公交卡、移动支付、数据传输、门禁卡等功能,之前在评论看多好多人说不知道怎么复制门禁卡,今天就来和大家讲解下如何复制门禁卡。我们以华为手机,前提是手机支持NFC功能的。第一步:门禁卡功能在钱包里面,所以首先找到华为钱包并打开,登录你的华为账号,在主页找到【门钥匙】。第二步:点击进入【门钥匙】后,点击【添加】,开始【模拟】门卡第三步:根据提示,将门卡放到手机背面NF…

  • javascript 使用btoa和atob来进行Base64转码和解码

    javascript 使用btoa和atob来进行Base64转码和解码老是记不住这两个函数,干脆写下来,比较好翻。avascript原生的api本来就支持,Base64,但是由于之前的javascript局限性,导致Base64基本中看不中用。当前html5标准正式化

  • Windows server 2003 安装vs2005 sp1补丁包报1718错误的解决方法

    Windows server 2003 安装vs2005 sp1补丁包报1718错误的解决方法收藏于2012-03-30迁移自个人的百度空间——————————–解决步骤如下1.在控制面板中打开“管理工具“。2.双击“本地安全策略”。 3.单击“软件限制策略”。(注意:如果未列出软件限制,请右击“软件限制策略”,然后单击“新建策略”。)4.在“对象类型”下,双击“强制”。 5.单击“除本地管理员以外的所有用户”…

  • SpringBoot自动装配原理「建议收藏」

    SpringBoot自动装配原理「建议收藏」SpringBoot项目无需各种配置文件,一个main方法,就能把项目启动起来。那么我们看看SpringBoot是如何进行自动配置和启动的。SpringBoot通过main方法启动SpringApplication类的静态方法run()来启动项目。根据注释的意思,run方法从一个使用了默认配置的指定资源启动一个SpringApplication并返回ApplicationContext对象,这个默认配置如何指定呢?这个默认配置来源于@SpringBootApplication注解,这个注解是个复

  • 用PMML实现机器学习模型的跨平台上线

    用PMML实现机器学习模型的跨平台上线在机器学习用于产品的时候,我们经常会遇到跨平台的问题。比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环

发表回复

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

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