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

数据结构与算法:选择排序

介绍

选择排序是一种简单直观的排序算法,其基本思想是:从待排序的数据元素中,每次选择最小(或最大)的元素,将其与序列的起始位置交换,然后继续对剩余的元素进行排序,知道整个序列排序完成。

算法步骤

1、从待排序的序列中选择一个最小的元素,将其与序列第一个位置交换。

2、在剩余未排序的元素中继续选择最小的元素,放到已排序序列的末尾。

3、重复上述步骤,知道所有元素排序完成

优缺点

优点:

  • 简单易懂:选择排序算法简单直观,易于实现和理解
  • 适用于小规模数据集:在小规模数据集上表现良好
  • 部分有序数据集优化:在部分有序的数据集上可以进行优化
  • 内存要求低:适用于对内存要求严格的场景
  • 不敏感的数据集顺序:适用于对数据集的顺序不敏感的情况

缺点:

  • 效率低:时间复杂度为O(N^2),不适合大规模数据集
  • 多次交换:需要进行多次交换操作
  • 不稳定性:选择排序是不稳定的排序方法。相同的元素在排序后的相对位置可能会改

代码

#include <stdio.h>

void Swap(int* p1, int* p2)
{
	int tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

void Print(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}

void SelectSort(int* a, int n)
{
	int begin = 0;
	while (begin < n - 1)
	{
		int min = begin;
		for (int i = begin + 1; i < n; i++)
		{
			if (a[i] < a[min])
			{
				min = i;
			}
		}
		Swap(&a[begin], &a[min]);
		begin++;
	}
}

int main()
{
	int a[] = { 9,1,2,5,7,4,6,3 };
	int sz = sizeof(a) / sizeof(int);
	SelectSort(a, sz);
	Print(a, sz);
	return 0;
}

优化

每次循环只取一个最小值效率太慢,可以同时去最小值和最大值。

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

相关文章:

  • 天佐.盘古斧 即时通讯平台
  • kakfa-3:ISR机制、HWLEO、生产者、消费者、核心参数负载均衡
  • SpringBoot + redisTemplate 实现 redis 数据库迁移、键名修改
  • 技术速递|开启全新的多模态模型 - Microsoft Phi-4-mini Phi-4-multimodal
  • 无人设备遥控器之遥控帧序列篇
  • c高级第五天
  • “解决 MyBatis 错误:SAXParseException - 文件提前结束导致 XML 映射文件解析失败“
  • 天佐.炼妖壶 带内存泄漏检测的内存池
  • 华为飞腾D2000芯片(基于ARM架构)的欧拉操作系统(openEuler)上部署MySQL
  • doris: Hive
  • 使用Word时无法粘贴,弹出错误提示:运行时错误‘53‘:文件未找到:MathPage.WLL
  • Qt | 目录和文件路径常用函数大全
  • 剧本杀门店预约小程序:市场发展下的刚需
  • AutoGen学习笔记系列(一)Tutorial - Model
  • QT基础十二、标准项模型:QStandardItemModel
  • 2024华为OD机试真题-数据分类算法(C++/Java/Python)-E卷-100分
  • 零基础学习OpenGL(二)查看各工程源码
  • 蓝桥杯备考:动态规划线性dp之下楼梯问题进阶版
  • MacOS 10.15上使用Docker遇到的几个问题
  • Python中的内置函数 - 第一章
  • 网站建设最新技术/八戒
  • dede医院网站模板下载/seo黑帽技术有哪些
  • 设计logo图案用什么软件/seo高效优化
  • 浪潮网站 ibm网站 哪家公司做的/指数分布的分布函数
  • 个性化网站设计/seo和点击付费的区别
  • 网站建设中 模板/seo代理计费系统