选择排序

选择排序

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

一. 算法描写叙述

    选择排序:比方在一个长度为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]);
	}
}

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119266.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月13日 上午10:00
下一篇 2021年11月13日 上午11:00


相关推荐

  • 修复公路题解

    修复公路题解修复公路题目题目背景 AAA 地区在地震过后 连接所有村庄的公路都造成了损坏而无法通车 政府派人修复这些公路 题目描述给出 A 地区的村庄数 NNN 和公路数 MMM 公路是双向的 并告诉你每条公路的连着哪两个村庄 并告诉你什么时候能修完这条公路 问最早什么时候任意两个村庄能够通车 即最早什么时候任意两条村庄都存在至少一条修复完成的道路 可以由多条公路连成一条道路 输入格式第 111 行两个正整数 NNN 下面 MMM 行 每行 333 个正整数 x y tx y tx y t 告诉你这条公路连着 x yx yx y 两个村

    2026年3月18日
    3
  • cmd切换盘符_cmd分配盘符

    cmd切换盘符_cmd分配盘符cmd切换盘符自己老是忘,每次都要去百度,所幸就记录下:打开cmd的命令行:window+R,输入cmdcmd命令行下怎么切换目录此时默认的地址是C盘cmd命令行下怎么切换目录如果我们要访问D盘,只需要输入D:(不区分大小写)如下图,盘符已经更改cmd命令行下怎么切换目录如果我们要进入一个具体的文件夹,那么继续输入命令。比如我要进入D:\androi…

    2022年10月4日
    3
  • 2021年软件测试工具总结——单元测试工具

    2021年软件测试工具总结——单元测试工具在应用程序中 单元是具有一个或多个输入和单个输出的软件中最小可测试部分 单元测试是一种测试软件代码单元的方法 通常包括一个或两个输入 产生一个输出 单元测试主要关注独立模块的功能正确性 目的是确保每个单元都按照预期的方式运行 要进行单元测试 开发人员需要编写测试代码 单元测试有手动和自动化测试两种类型 自动化通常是首选的方法 可以为开发人员节省大量的时间和精力 单元测试是自动化测试金字塔模型中占比最大的测试类型 做好单元测试对于保证软件产品的质量非常重要 单元测试可以 及早发现软件中的缺陷并

    2026年3月20日
    1
  • 五、分类模型_大五模型包括

    五、分类模型_大五模型包括一、分类模型的定义文章目录一、分类模型的定义二、分类模型类型2.1、逻辑回归2.2、决策树2.3、支持向量机2.4、朴素贝叶斯在机器学习中,我们把机器学习分为监督学习和非监督学习,监督学习就是在一组有标签(有目标)属性的数据集中,我们将数据教给机器学习,让他根据数据中的属性和目标,去看题目答案一样把答案记住。之后再给类似的题目去作一样。我们把数据集中的标签,一般都标为属性,而我们又把属性分为离散属性和连续属性,每一个标签都是可以这样分的。像如果我们预测的属性值的特性是连续属性的话,我们把这种模型称为是

    2026年4月17日
    4
  • Postman安装教程_postman需要联网吗

    Postman安装教程_postman需要联网吗1.官网安装(别看)打开官网,https://www.getpostman.com安装很麻烦还很容易安装失败(先请擦掉眼泪,不要忧伤,我们依然可以好好的)2.非官网安装这是一种直接通过打包已经安装的扩展程序的方式,来进行我认为的「非法安装」,但没办法,只能这样。我会给你一个安装包,见附件。你应该下载下来,解压缩到你喜欢的位置。(解压的位置自己要记得)安装包(Postman4.1.2下载地址:http://files.cnblogs.com/files/mafly/postman-4

    2025年12月16日
    7
  • Vim搜索关键字[通俗易懂]

    Vim搜索关键字[通俗易懂]有以下两种方法Method1:/content默认从上往下查找只读模式下输入/content后回车按n向下查找按N向上查找Method2:?content默认从下往上查找只读模式下输入?content后回车按n向上查找按N向下查找实例/content用Vim打开文件后,直接输入/关键字并回车,定位到第一个关键字,之后通过n向下查找,通过N向上查找?

    2026年2月25日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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