C++排序算法之选择排序解析

 更新时间:2023年10月31日 09:16:08   作者:大庆指针  
这篇文章主要介绍了C++排序算法之选择排序解析,遍历数组选择找到最大值,记录最大值下标maxindax,然后将最大值与最后一个值交换, 在剩下的待排序数组中,重新找到最大值,重复第一步,循环操作,直至数组排序完成,需要的朋友可以参考下

C++选择排序

思想

遍历数组,选择找到最大值,记录最大值下标maxindax,然后将最大值与最后一个值交换,即swap(vec[maxindax],vec[n-1]);

在剩下的待排序数组中,重新找到最大值,重复第一步,swap(vec[maxidnax],vec[n-2]),循环操作,直至数组排序完成。

代码

#include<iostream>
#include<vector>
using namespace std;
void selectSort(vector<int>&vec,int n)
{
	//j代表是待排序数组的个数,下标对应就是0到j-1
	for (int j = n; j >= 1; j--)
	{
		int max = vec[0];
		int maxindax = 0;
		for (int i = 0; i < j; i++)
		{
			if (vec[i] > max)
			{
				//找到最大数,并且记录下标maxIndax
				max = vec[i];
				maxindax = i;
			}
		}
		//交换最大值与待排序数组的最后一个
		swap(vec[maxindax], vec[j - 1]);
	}
}
int main()
{
	vector<int>vec = { 2,3,5,8,9,7,4,6,1 };
	selectSort(vec, vec.size());
	for (auto it : vec)
	{
		cout << it << " ";
	}
	return 0;
}

解析

时间复杂度:

第一次排序时是n个元素,比较n-1次

第二次排序时是n-1个元素,比较n-2次

...

第n-1次排序时是2个元素,比较1次

第n次排序时是1个元素,比较0次

元素交换次数为k(k<n-1次)

时间复杂度=比较次数+交换次数

故选择排序时间复杂度为O(1+2+3+...+n-1+k)=O(n*(n-1)/2+k)=O(n2)

空间复杂度:

在原数组上操作,即使用了常数级空间O(1)。

稳定性

稳定性是指排序之后相同的数相对位置不变。

实例:3 2 3 1 从小到大排序(选择最小的放前面),排序之后第二个3在第一个3前面,所以不稳定。

到此这篇关于C++排序算法之选择排序解析的文章就介绍到这了,更多相关C++选择排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ 内存管理原理分析

    C++ 内存管理原理分析

    本章主要介绍C++的内存管理,以C++的内存分布作为引入,介绍C++不同于C语言的内存管理方式(new delete对比 malloc free),最后为了加深读者的理解,会介绍new和delete的底层实现原理
    2021-11-11
  • C++中 string 中的常用方法使用心得

    C++中 string 中的常用方法使用心得

    这篇文章主要介绍了C++中 string 中的常用方法使用心得,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • C语言实现动态版通讯录的示例代码

    C语言实现动态版通讯录的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现一个简单的动态版通讯录,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-08-08
  • C语言实现简单的五子棋游戏

    C语言实现简单的五子棋游戏

    这篇文章主要为大家详细介绍了c语言实现简单的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++ 运算符重载的使用

    C++ 运算符重载的使用

    运算符重载使自定义类型支持内置运算符操作,提升代码可读性,通过成员或全局函数实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • C++中的类型查询之探索typeid和type_info(推荐)

    C++中的类型查询之探索typeid和type_info(推荐)

    C++ 是一种静态类型语言,这意味着每个变量的类型在编译时就已经确定,在这篇技术分享中,我们将探讨 C++ 中的 typeid 和 type_info,以及如何使用它们来获取类型信息,需要的朋友可以参考下
    2024-05-05
  • Unreal学习之简单三角形的绘制详解

    Unreal学习之简单三角形的绘制详解

    之所以写这个绘制简单三角形的实例其实是想知道如何在Unreal中通过代码绘制自定义Mesh,如果你会绘制一个三角形,那么自然就会绘制复杂的Mesh了。所以这是很多图形工作者的第一课,快跟随小编一起学习起来吧
    2023-02-02
  • 关于C/C++中的side effect(负效应)和sequence point(序列点)

    关于C/C++中的side effect(负效应)和sequence point(序列点)

    不知你在写code时是否遇到这样的问题?int i = 3; int x = (++i) + (++i) + (++i); 问x值为多少?进行各种理论分析,并在编译器上实践,然而可能发现最终的结果是不正确的,也是不稳定的,不同的编译器可能会产生不同的结果。这让人很头疼
    2013-10-10
  • C++的原生数组你了解多少

    C++的原生数组你了解多少

    这篇文章主要为大家详细介绍了C++的原生数组,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 《战狼》中两军作战入侵代码竟然是输出星期几的!

    《战狼》中两军作战入侵代码竟然是输出星期几的!

    这篇文章主要介绍了《战狼》中两军作战入侵代码竟然是输出星期几的,喜欢战狼和编程的同学可以了解下。
    2017-11-11

最新评论