【C语言】深入解析选择排序算法

embedded/2024/9/24 13:25:04/

    • 一、算法原理
    • 二、算法性能分析
    • 三、C语言实现示例
    • 四、总结

一、算法原理

 选择排序(Selection Sort)是一种简单直观的算法>排序算法。它的工作原理是不断地选择剩余元素中的最小(或最大)元素,放到已排序的序列的末尾,直到排序完整个序列。

选择排序的主要步骤如下:

  1. 在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置。
  2. 从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕。

请添加图片描述

二、算法性能分析

  • 时间复杂度:最好、最坏和平均时间复杂度均为O( n 2 n^2 n2)。
  • 空间复杂度:O(1),选择排序只需要一个额外的存储空间用于交换元素。
  • 稳定性:不稳定,选择排序在找到最小(或最大)元素后,需要和序列的起始位置进行交换,可能会导致相同元素的相对顺序发生改变。

三、C语言实现示例

以下是一个使用C语言实现的选择算法>排序算法的示例:

#include <stdio.h>
void selectionSort(int arr[], int n) {int i, j, min_idx;// 一遍又一遍地遍历未排序的部分for (i = 0; i < n - 1; i++) {// 找到最小元素的索引min_idx = i;for (j = i + 1; j < n; j++) {if (arr[j] < arr[min_idx]) {min_idx = j;}}// 将找到的最小元素与第i个位置的元素交换if (min_idx != i) {int temp = arr[i];arr[i] = arr[min_idx];arr[min_idx] = temp;}}
}
// 打印数组的函数
void printArray(int arr[], int size) {int i;for (i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}
// 主函数来测试上面的代码
int main() {int arr[] = {64, 25, 12, 22, 11};int n = sizeof(arr) / sizeof(arr[0]);selectionSort(arr, n);printf("Sorted array: \n");printArray(arr, n);return 0;
}

运行上述代码,将会得到已排序的数组:

Sorted array: 
11 12 22 25 64 

四、总结

 选择排序是一种简单直观的算法>排序算法,易于实现,但时间复杂度较高,适用于数据量较小的场景。在实际应用中,应根据具体需求选择合适的算法>排序算法。希望本文对您有所帮助。


http://www.ppmy.cn/embedded/3527.html

相关文章

JVM-内存模型(运行时数据区)

目录 1. 线程私有1.1 程序计数器&#xff08;PC寄存器&#xff09;1.2 虚拟机栈1.3 本地方法栈 2. 线程共享2.1 堆2.2 方法区 3. 直接内存 参考 pdai全栈知识体系-JVM-内存结构 1. 线程私有 1.1 程序计数器&#xff08;PC寄存器&#xff09; 作用&#xff1a;PC 寄存器用来存…

React + 项目(从基础到实战) -- 第九期

实现分页 , LoadMore 上划加载更多功能效果 分页 page : 当前页 pageSize: 页面大小 自定义分页组件 组件传值 import {FC , useEffect, useState } from reactimport { useNavigate , useLocation ,useSearchParams} from react-router-dom;import { Pagination } from &quo…

Aws Nat Gateway

要点 NAT网关要能访问外网&#xff0c;所以需要部署在有互联网网关的Public子网中。 关键&#xff1a; NAT网关创建是选择子网&#xff0c;一定要选择公有子网&#xff08;有互联网网关子网&#xff09; 特别注意&#xff1a; 新建nat网关的时候&#xff0c;选择的子网一定…

ubuntu系统下opencv的编译安装

ubuntu系统下opencv的编译安装 参考https://blog.csdn.net/KIK9973/article/details/118830187 1 安装准备 1.1安装依赖环境(Ubuntu18.04) 下载opencv的依赖&#xff0c;其中第三行的依赖是可选的&#xff0c;前两行的依赖则是必要的。 sudo apt-get install build-essent…

Flutter 插件站新升级: 加入优秀 GitHub 开源项目

Flutter 插件站新升级: 加入优秀 GitHub 开源项目 视频 https://youtu.be/qa49W6FaDGs https://www.bilibili.com/video/BV1L1421o7fV/ 前言 原文 https://ducafecat.com/blog/flutter-awesome-github-repo-download 这几天晚上抽空把 Flutter 插件站升级&#xff0c;现在支…

服务器清理挖矿问题

top -c ps -ef netstat -antp # 查所有端口链接 ls -al /proc/$PID/exe # 查执行文件 kill -9 $PID # 杀进程 // 查文件 /usr/lib/systemd/system /usr/lib/systemd/system/multi-user.target.wants /etc/rc.local /etc/inittab /etc/rc0.d/ /etc/rc1.d/ /etc/rc2.d/…

分布式锁(Redis)

一、序言 本文和大家聊聊分布式锁以及常见的解决方案。 二、什么是分布式锁 假设一个场景&#xff1a;一个库存服务部署在上面三台机器上&#xff0c;数据库里有 100 件库存&#xff0c;现有 300 个客户同时下单。并且这 300 个客户均摊到上面的三台机器上&#xff08;即三台…

Python:腾讯云-轻量应用服务器-实现自动快照

Python&#xff1a;腾讯云-轻量应用服务器-实现自动快照 – WhiteNights Site 先说一下配置情况&#xff1a;轻量应用服务器一块系统盘。我没钱加盘&#xff0c;所以不知道多块盘的情况下这个脚本还能不能用。 官方文档给的代码已经很齐全了&#xff0c;只需要做点补充就能直…