| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> C#(C sharp)四种简单的排序及优劣(菜鸟理解版) 1、冒泡排序2、直接插入排序3、选择排序4、希尔排序 -> 正文阅读 |
|
[数据结构与算法]C#(C sharp)四种简单的排序及优劣(菜鸟理解版) 1、冒泡排序2、直接插入排序3、选择排序4、希尔排序 |
目录 序言在排序中有四种排序,其中冒泡排序是基本上每个新手都会经历的,但是还有另外三种排序,是大部分教程所没有的,分别是直接插入排序和选择排序,即最不常用的希尔排序。 四种排序的优劣 省流:1、冒泡排序用的是遍历的方式,将每一个数组的元素两两进行对比,谁小谁去前面,然后for循环一遍。优点是最适合讲解排序的意义,帮助新手理解循环和排序,但是计算量太大,从头到尾算一遍。 2、直接插入排序把一个原来的数组的元素,一个个切片出来,然后插入到新的数组中,在这个新的数组中进行排序。优点就是计算量少。 3、选择排序从一个数组中,选出最大或者最小的哪一个,放在新数组的第一位,然后依次循环 优点:优点就是计算量少,一次成功 4、希尔排序希尔排序利用了插入排序的一个特点来优化排序算法,插入排序的这个特点就是:当数组基本有序的时候,插入排序的效率比较高。 这里仅做说明,不做详细解释,尊重原作者,请移步 Csharp四种简单的排序算法_饅頭的博客-CSDN博客_c# 算法 不过总结来说,就是先把数组拆分多个小数组,然后小数组先排序,然后就基本有序,再继续合道大的数组进行排序。 1、冒泡排序冒泡排序用的是遍历的方式,将每一个数组的元素两两进行对比,谁小谁去前面。 ?然后使用for循环,将每一个元素进行对比,重新排列 优点:简单易懂,能够帮助初学者快速理解for循环和排序 缺点,处理大型数组的时候,计算量大,面对一些有一定规律的数组,不能更加快速排序 具体实现:以小到大进行循环
2、插入排序插入排序是较为简单的一个,将一个原来的数组,切片,然后一个个插入新的数组,当然每次 插入新的元素,都要进行一次排序。 优点: 就是交换次数要减少很多,运算量也少了很多。 ?实现
3、选择排序基本原理现在原有的数组上,进行排序,找到那个需要排序的,比如原数组最小或者最大的,把他挑出来放到新数组中,然后依次继续。 优点:就是交换次数要减少很多,运算量也少了很多。 实现
4、希尔排序该排序书上未讲解,引用前辈方案。 以下方式均为摘抄希尔排序利用了插入排序的一个特点来优化排序算法,插入排序的这个特点就是:当数组基本有序的时候,插入排序的效率比较高。比如对于下面这样一个数组: int[] array = { 1, 0, 2, 3, 5, 4, 8, 6, 7, 9 }; 插入排序的输出如下: 可以看到,尽管比较的趟数没有减少,但是交换的次数却明显很少。希尔排序的总体想法就是先让数组基本有序,最后再应用插入排序。具体过程如下:假设有数组int a[] = {42,20,17,13,28,14,23,15},不失一般性,我们设其长度为length。 第一趟时,步长step = length/2 = 4,将数组分为4组,每组2个记录,则下标分别为(0,4)(1,5)(2,6)(3,7);转换为数值,则为{42,28}, {20,14}, {17,23}, {13,15}。然后对每个分组进行插入排序,之后分组数值为{28,42}, {14,20}, {17,23}, {13,15},而实际的原数组的值就变成了{28,14,17,13,42,20,23,15}。这里要注意的是分组中记录在原数组中的位置,以第2个分组{14,20}来说,它的下标是(1,5),所以这两个记录在原数组的下标分别为a[1]=14;a[5]=20。 第二趟时,步长 step = step/2 = 2,将数组分为2组,每组4个记录,则下标分别为(0,2,4,6)(1,3,5,7);转换为数值,则为{28,17,42,23}, {14,13,20,15},然后对每个分组进行插入排序,得到{17,23,28,42}{13,14,15,20}。此时数组就成了{17,13,23,14,28,15,42,20},已经基本有序。 第三趟时,步长 step=step/2 = 1,此时相当进行一次完整的插入排序,得到最终结果{13,14,15,17,20,23,28,42}。 详细步骤请移步 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:25:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |