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++实现评教管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 图解C++的STL之stack和queue,轻松理解数据结构

    图解C++的STL之stack和queue,轻松理解数据结构

    聚焦 C++ 的 STL 中的 stack 和 queue,让数据结构变得简单有趣! 通过图解的方式,我们将轻松理解这两个重要的数据结构,准备好开启 STL 学习之旅了吗?让我们一起探索 stack 和 queue 的奥秘吧!
    2024-03-03
  • C++11 智能指针的具体使用

    C++11 智能指针的具体使用

    本文主要介绍了C++11 智能指针的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C/C++中组合详解及其作用介绍

    C/C++中组合详解及其作用介绍

    这篇文章主要介绍了C/C++中组合的详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Qt图形图像开发之曲线图表库QChart编译安装详细方法与使用实例

    Qt图形图像开发之曲线图表库QChart编译安装详细方法与使用实例

    这篇文章主要介绍了Qt图形图像开发之曲线图表库QChart编译安装详细方法与使用实例,需要的朋友可以参考下
    2020-03-03
  • C++简易通讯录系统实现流程详解

    C++简易通讯录系统实现流程详解

    这篇文章主要为大家介绍了C语言简易版通讯录的具体实现流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • C语言函数栈帧的创建与销毁原理图解

    C语言函数栈帧的创建与销毁原理图解

    我们知道c语言中函数都是被调用的,main函数里面能调用其他函数,其实main函数也是被别的函数调用的,下面通过本文给大家分享c语言函数栈帧的创建和销毁过程,一起看看吧
    2022-05-05
  • C++通过COM接口操作PPT

    C++通过COM接口操作PPT

    这篇文章主要为大家详细介绍了C++通过COM接口操作PPT的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • C++类与对象的详细说明2

    C++类与对象的详细说明2

    这篇文章主要为大家详细介绍了C++的类与对象,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++使用CriticalSection实现线程同步实例

    C++使用CriticalSection实现线程同步实例

    这篇文章主要介绍了C++使用CriticalSection实现线程同步实例,是使用CriticalSection对前文实例的扩展,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10

最新评论