C#实现——十大排序算法之选择排序
时间:2022-07-28
本文章向大家介绍C#实现——十大排序算法之选择排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
选择排序法
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循环结束后并不能为下一次的循环提供有效信息。这种性质在某些时候是一种缺陷。在数组大小相同时,当一个几乎已经有序的数组使用选择排序法花费的时间和无序数组所花费的时间是一致的。
- 数据的移动量最少 交换的次数和数组的大小呈线性关系,其他的排序算法对数据移动量都是线性对数级别或平方级别的。
- 【译】《Understanding ECMAScript6》- 第一章-基础知识(一)
- 聊聊C10K问题及解决方案
- 【译】《Understanding ECMAScript6》- 简介
- 深入理解 Java 并发之 synchronized 实现原理
- 你真的很熟分布式和事务吗?
- 基于Nginx负载均衡方案
- Android 使用android-support-multidex解决Dex超出方法数的限制问题
- Netty 实现原理浅析
- 上海2017QCon个人分享总结
- 为最佳性能调优 Nginx
- 《微信小程序七日谈》- 第一天:人生若只如初见
- 类加载器详解
- 《微信小程序七日谈》- 第二天:你可能要抛弃原来的响应式开发思维
- 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux下通过xinetd服务管理 rsync 实现开机自启动
- linux实现自动删除最旧的几个文件详解
- 基于Ubuntu 16.04设置固定IP的方法教程
- CentOS添加和删除用户以及用户组的方法
- Linux下使用inode删除指定文件方法示例
- Apache虚拟目录配置及vue-cli反向代理的设置方法
- linux socket通讯获取本地的源端口号的实现方法
- 初识centos7与centos6的区别整理(内核、命令等)
- Apache下通过shell脚本提交网站404死链的方法
- centos查找已安装的jdk路径的方法
- CentOS7+apache+php7+mysql5.7配置教程详解
- 如何利用SystemTap统计函数执行耗时详解
- 关于安装linux redhat后无法使用yum命令安装gcc-c++问题的解决过程
- 基于代码的自动化和无代码自动化
- Java Stream中map和flatMap方法