九大排序之——选择排序

选择排序:


思想:


首先将给定的序列看成是一个有序序列和一个无序序列,选择排序也就是从给定

序列中选取一个最大的(最小的)元素放到有序序列的对应位置,再从剩余的无序

列中挑选一个次大的(次小的)元素放到有序元素的位置,重复上述操作,直到无

序列为空,排序完成。


选择排序图示:



代码实现:

#include<iostream>
 using namespace std;

void Print(int* arr, size_t n)
 {
	for (size_t i = 0; i < n; ++i)
		 {
		cout << arr[i] << " ";
		}
	cout << endl;
	}

//升序
template<typename T>
struct Greater
 {
	bool operator()(T& t1, T& t2)
		 {
		return t1 > t2;
		}
	};

//降序
template<typename T>
struct Less
 {
	bool operator()(T& t1, T& t2)
		 {
		return t1 < t2;
		}
	};

template<typename T, typename Com = Greater<int>>
void SelectSort(T* arr, size_t n)
 {
		//对max进行初始化
		int max = 0;
		//进行选择排序
		for (size_t i = 0; i < n - 1; ++i)
		 {
		max = i;
		for (size_t j = i; j < n; ++j)
			 {
			if (Com()(arr[max], arr[j]))
				 max = j;
			}
		if (max != i)
			 swap(arr[max], arr[i]);
		}
	}

复杂度和稳定性


时间复杂度:O(N^2)与初始序列无关

空间复杂度:O(1)
稳定性:不稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_happiness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值