当前位置: 首页 > article >正文

数据结构之排序--选择排序详解

选择排序

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

直接选择排序:

在元素集合 array[i]--array[n-1] 中选择关键码最大 ( ) 的数据元素
若它不是这组元素中的最后一个 ( 第一个 ) 元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array[i]--array[n-2] array[i+1]--array[n-1] )集合中,重复上述步骤,直到集合剩余 1 个元素

直接选择排序的特性总结:

1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
2. 时间复杂度: O(N^2)
3. 空间复杂度: O(1)
4. 稳定性:不稳定

实现

void SelectSort(int* a, int n)
{
	int begin = 0, end = n - 1;
	while (begin < end)
	{
		int maxi = begin, mini = begin;
		for (int i = begin; i <= end; i++)
		{
			if (a[i] > a[maxi])
			{
				maxi = i;
			}

			if (a[i] < a[mini])
			{
				mini = i;
			}
		}

		Swap(&a[begin], &a[mini]);
		// 如果maxi和begin重叠,修正一下即可
		if (begin == maxi)
		{
			maxi = mini;
		}

		Swap(&a[end], &a[maxi]);

		++begin;
		--end;
	}
}


http://www.kler.cn/a/387831.html

相关文章:

  • <rust>在rust中,实现32位浮点数与16进制之间的转换
  • java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
  • 前端 图片上鼠标画矩形框,标注文字,任意删除
  • C++ 常见面试题(二)
  • Jenkins-持续集成、交付、构建、部署、测试
  • 超完整Docker学习记录,Docker常用命令详解
  • MATLAB和Python多语高维转录分析
  • 在 Vue 中实现与优化轮询技术
  • JMeter基础篇
  • react useRef
  • 水库汛限水位是什么?如何进行安全监测
  • Android HandlerThread 基础
  • 修复 Ubuntu中 “Command ‘python’ not found” 的错误
  • 软件工程概论项目(一),git环境的配置和平台代码的拉取
  • 电子设计竞赛准备经历分享
  • w025基于SpringBoot网上超市的设计与实现
  • 数据分析:16s扩增子网络分析之SparCC
  • java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector问题解决
  • ubuntu 安装 mongodb 笔记记录
  • LabVIEW编程基础教学(二)--数据类型
  • IEEE 1588:电信网络的精确时间协议 (PTP)
  • 【学习笔记】SAP ABAP——OPEN SQL(一)【SELECT语句】
  • linux服务器vim的四种模式
  • J2V8学习一 --- 介绍
  • 实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新
  • 数学基础 -- 线性代数之线性无关