排序算法-选择排序法(SelectionSort)

排序算法-选择排序法(SelectionSort)

1、说明

选择排序法也是枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入另一个数列中,最后的结果即为已排序的数列。选择排序法可使用两种方式排序,即在所有的数据中,若从小到大排序,则将最大值放入第一个位置;若从小到大排序,则将最大值放入最后一个位置。例如,一开始在所有的数据中挑选一个最小项放在第一个位置(假设是从小到大排序),再从第二项开始挑选一个最小项放在第2个位置,以此重复,直到完成排序位置。

2、算法分析

  1. 无论是最坏情况、最好情况还是平均情况都需要找到最大值(或最小值),因此其比较次数为:次,时间复杂度为
  2. 由于选择排序是以最大值或最小值直接与最前方未排序的键值交换,数据排序顺序很有可能被改变,因此它不是稳定排序。
  3. 因此只需一个额外的空间,所以空间复杂度为最佳。
  4. 比较适用于数据量小或有部分数据已经过排序的情况。

3、C++代码

cpp 复制代码
#include<iostream>
using namespace std;

int main() {

	int data[6] = { 9,7,5,3,4,6 };

	cout << "原始数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}
	cout << endl;

	//第1次排序结果:
	//3  9  7  5  4  6
	//第2次排序结果:
	//3  4  9  7  5  6
	//第3次排序结果:
	//3  4  5  9  7  6
	//第4次排序结果:
	//3  4  5  6  9  7
	//第5次排序结果:
	//3  4  5  6  7  9
	for (int i = 0; i < 5; i++) {
		for (int j = i + 1; j < 6; j++) {
			//data[i] < data[j]	从大到小排序的条件
			//data[i] > data[j]	从小到大排序的条件
			if (data[i] > data[j]) {	
				int temp = 0;
				temp = data[i];
				data[i] = data[j];
				data[j] = temp;
			}
		}
	}

	cout << "最终数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}
	cout << endl;

	return 0;
}

输出结果

相关推荐
mqiqe1 分钟前
AgentScope Java Harness:2. 上下文压缩:让长期 Agent 永不“失忆“
java·开发语言
Aurorar0rua1 分钟前
CS50 x 2024 Notes Memory - 03
c语言·开发语言·学习方法
爱敲代码的憨仔16 分钟前
BM25全文检索
开发语言·python·全文检索
gbase_lmax16 分钟前
深度递归与广度递归(DFS,BFS)实现
算法·深度优先·宽度优先
西柚研究生1234561 小时前
论文分析15:跨层特征交互的多尺度无人机小目标检测算法
人工智能·算法·目标检测
油丶酸萝卜别吃6 小时前
utils.js 说明文档
开发语言·javascript·ecmascript
rannn_1119 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
数模竞赛Paid answer9 小时前
2026年华东杯数学建模B题医药物流安排问题解题全过程文档及程序
算法·数学建模·数据分析·华东杯
leisoo80979 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴9 小时前
21. 泛型编程上
开发语言·c++·笔记·算法