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

ops/2025/3/6 22:52:18/

介绍

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

算法步骤

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--;}
}


http://www.ppmy.cn/ops/163717.html

相关文章

掌握 Joblib:机器学习模型存储与加载的秘密武器

前言 你有没有遇到过这种让人崩溃的场景:辛辛苦苦训练好的模型,一关闭 Python 进程就像消失在空气中,一点痕迹都不留下?或者你花了好几个小时处理数据,结果下一次运行时又得从头来过?这简直就像精心烤制的蛋糕,端到桌子上,转眼被风吹走! 别担心,今天你将遇到一个神…

【运维】轻量级服务器运行情况监控组件Glances

1.服务器环境ubuntu 2.全自动安装脚本 创建脚本&#xff1a; nano install_glances.sh 粘贴最后脚本内容 给权限&#xff1a; chmod x install_glances.sh 运行脚本&#xff1a; ./install_glances.sh 脚本内容&#xff1a; #!/bin/bashecho "开始全自动安装 Glances…

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…

K8S学习之基础六:k8s中pod亲和性

Pod节点亲和性和反亲和性 podaffinity&#xff1a;pod节点亲和性指的是pod会被调度到更趋近与哪个pod或哪类pod。 podunaffinity&#xff1a;pod节点反亲和性指的是pod会被调度到远离哪个pod或哪类pod 1. Pod节点亲和性 requiredDuringSchedulingIgnoredDuringExecution&am…

Spring Cloud LoadBalancer详解

一、介绍 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现,用来替代Ribbon(已经停更), 二、Ribbon和Loadbalance 对比 组件组件提供的负载策略支持负载的客户端Ribbon随机 RandomRule轮询 RoundRobinRule 重试 RetryRule最低并发 Bes…

DeepSeek掘金——DeepSeek-R1驱动的金融分析师

DeepSeek掘金——DeepSeek-R1驱动的金融分析师 我们将专注于创建一个专门用于提取相关新闻见解的代理。该代理将利用 DeepSeek-R1 提供全面的市场洞察。 在当今快节奏的金融市场中,获取准确及时的信息对于做出明智的投资决策至关重要。想象一下,一位人工智能金融分析师能够分…

deepseek本地部署:deepseek-r1-distill-llama-70b应用实践

DeepSeek本地部署之deepseek-r1-distill-llama-70b 本地部署与 AI 应用实践 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;的快速发展为企业数字化带来了前所未有的机遇。然而&#xff0c;中小企业在使用诸如 GPT-4 这类云端大模型服务时&#xff0c;往往面临数…

工作中,当遇到要把http请求变成https时 怎么处理

这里就记录下思路。 1&#xff0c;简单情况 如果只是需要在测试环境测试个https&#xff0c;那很简单 大家百度下java springboot服务端http接口怎么变https就行了,很简单。jdk也有生成证书的功能 2&#xff0c;生产情况 也很简单。一般生产上也不会让开发去申请证书的&…