C#实现——十大排序算法之选择排序
DotNet程序园
共 1524字,需浏览 4分钟
· 2020-10-15
选择排序法
1.工作原理(算法思路)
给定一个待排序数组,找到数组中最小的那个元素
如果最小元素不是待排序数组的第一个元素,则将其和第一个元素互换
在剩下的元素中,重复1、2过程,直到排序完成。
2.动图演示
3.C#代码实现
根据原理设计算法:
class Program
{
//选择排序法
private static void chooseSort(int[] array)
{
//第一个for循环:每一次循环完成后得到的当前的最大元素都与第i位做交换
for (int i = 0; i < array.Length; i++)
{
//min为最小元素的索引
int min = i;
//第二个for循环:将当前的array[j]与array[min]作比较,如果array[j]更小,则替换min的当前索引
for (int j = i + 1; j < array.Length; j++)
{
if (array[min] > array[j])
{
min = j;
}
}
//当第二个for循环完成时,array[min]中存储的就是当前最小元素
//将array[min]与array[i]交换
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
//打印输出数组
private static void printArray(int[] array)
{
foreach (int item in array)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
static void Main(string[] args)
{
int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
printArray(array);
chooseSort(array);
printArray(array);
Console.ReadKey();
}
}
输出结果
4.性能分析
1)复杂度
2)选择排序法特点
执行的比较和交换次数
比较:N*(N-1)/2
交换:N运行时间与输入无关
在每一次的for循环结束后并不能为下一次的循环提供有效信息。这种性质在某些时候是一种缺陷。在数组大小相同时,当一个几乎已经有序的数组使用选择排序法花费的时间和无序数组所花费的时间是一致的。数据的移动量最少
交换的次数和数组的大小呈线性关系,其他的排序算法对数据移动量都是线性对数级别或平方级别的。
评论
15种时间序列预测方法总结(包含多种方法代码实现)
向AI转型的程序员都关注了这个号👇👇👇在这篇文章中,我们将深入探讨时间序列预测的基本概念和方法。我们将首先介绍单元预测和多元预测的概念,然后详细介绍各种深度学习和传统机器学习方法如何应用于时间序列预测,包括循环神经网络(RNN)、一维卷积神经网络(1D-CNN)、Transformer、自回归模型(
机器学习AI算法工程
0
SpringBoot 实现图片防盗链功能
程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 4 分钟。来自:blog.csdn.net/weixin_46157208/article/details/138051737前言出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地
程序员的成长之路
0
一站式解决方案:基于 Arthas 实现服务发现和权限控制
来源:juejin.cn/post/7281849496983994383👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接
小哈学Java
0
用 Shader 实现旗帜飘扬动画效果
我觉得对于刚入门 3D 编程的朋友来说,如果能够完成代码创建模型数据->创建材质->编写Shader动画这一系列,想必会有满满的成就感。今天就用 Cocos Creator 的 utils.MeshUtils.createMesh 接口,带大家感受一下这个流程。这个流程不仅可以用于新手学
COCOS
2
面试官:限流的常见算法有哪些?
限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。1.计数器算法计数器算法是在一定的时间间隔里,记录请求次数,当请求次数超过该时间限制时,就把计数器清零,然后重新计算。当请求次数超过间隔内的最大次数时,拒绝访问。计数器算法的实现比较简单,但存在“突刺现象”。突刺现象是指
Stephen
0
985 本硕,秋招上岸阿里算法岗!
↓推荐关注↓节前,我们星球举办了技术&面试交流会,邀请了一些互联网大厂好友以及今年参加社招和校招面试的同学。会上探讨了一系列热门话题,包括大模型发展趋势、算法落地实践、面经总结,以及如何做好面试准备和应对常见考点。基于经验交流与实战经验,我们总结如下:《机器学习算法面试宝典》1.0 发布!今
Python学习与数据挖掘
0
SpringBoot+Minio实现上传凭证、分片上传、秒传和断点续传
关注我们,设为星标,每天7:40不见不散,架构路上与您共享回复架构师获取资源大家好,我是你们的朋友架构君,一个会写代码吟诗的架构师。Spring Boot整合Minio后,前端的文件上传有两种方式:1、文件上传到后端,由后端保存到Minio这种方式好处是完全由后端集中管理,可以很好的做到、身份验证、
Java架构师社区
0
轻松学习C#:百度行驶证C++离线SDK接入详解
效果 先看最终效果SDK 拿到完整包如图,687M解压后看看内容发现有个readme.txt,那就先看看内容1:用vs2015打开sln工程,最好用vs2015 comunity版本,可微软官网下载。2:sdk的doc目录有pdf接口文档。3:工程总入口main.cpp、请参考示例实现您的功能。4:
DotNet NB
9