冒泡排序——PowerShell版
继续读啊哈磊算法有感系列。上一篇是桶排序,在结尾总结了一下简化版桶排序的缺点。这一篇来说一下冒泡排序,冒泡排序可以很好的克服桶排序的缺点。下面我们先来说说冒泡排序的过程与思想——
冒泡排序的过程:
第一轮排序:如果有5个数从大到小排序,第一位数与第二位数进行比较,如果第一位小,则第一位数和第二位数交换位置。之后按照这个逻辑对第二位数与第三位数,第三位数与第四位数,第四位数与第五位数分别进行比较与交换。一共会进行4次比较,交换次数小于等于4。这样一轮比较下来,最小的数就排在了最后面;
第二轮排序:由于最小的数已经排在了最后面,所以第二轮排序只需要考虑前四位数。对前四位数按照第一轮排序的方法进行排序,将最小的数排到最后,也就是5个数中的倒数第二位;
第三轮排序:排前三位;
第四轮排序:排前两位。
冒泡排序的思想(思想就是对过程的抽象与总结):
先进行抽象:我们对上面的冒泡排序过程进行抽象,如果有n个数,第一轮会有n-1次比较(交换次数小于等于n-1),之后每轮的比较次数逐次减1,一共进行n-1轮排序。
再进行总结:冒泡排序就是每轮比较选出一个最小的数放在最后,进行n-1轮比较,将n个数按从大到小进行排列。(也可以是从小到大,这里按从大到小排序进行举例)

现在将我们的总结转换为代码的形式(由于PowerShell中貌似没有C语言中的结构体,我就用两个数组studentName和studentScore来替代了),其中粉色字体为排序部分的关键代码:
$count = Read-Host "Enter the amout number of the students"
$studentName = New-Object System.Collections.ArrayList
$studentScore = New-Object System.Collections.ArrayList
for($i=1;$i -le [int]$count;$i++)
{
$name = Read-Host "Enter the name"
$score= Read-Host "Enter the score"
$studentName.Add($name)
$studentScore.Add($score)
}
#Sort begin.
for($i=1;$i -le $count-1;$i++)
{
for($j=1;$j -le $count-$i;$j++)
{
#Compare the students' values.
if([int]$studentScore[$j-1] -le [int]$studentScore[$j])
{
#Exchange the score.
$s = $studentScore[$j-1]
$studentScore[$j-1] = $studentScore[$j]
$studentScore[$j] = $s
#Exchange the name.
$n = $studentName[$j-1]
$studentName[$j-1] = $studentName[$j]
$studentName[$j] = $n
}
}
$i++
}
#Print the sorted result.
Write-Host "Below is the sorted result:"
for($i=0;$i -le $count-1;$i++)
{
$j=$i+1
$tip = "NO."+$j+":"+$studentName[$i]+",score:"+$studentScore[$i]
Write-Host $tip -ForegroundColor Green
}
对于粉色字体:
1、外for循环代表进行$count-1轮排序;
2、内for循环代表从第一轮排序开始,第“$i”轮排序将进行$count-$i次比较。
运行界面如下——
输入学生数:

输入学生姓名:

输入学生分数:

排序结果为:

由于冒泡排序的核心是内外双层嵌套循环,时间复杂度为O(N*N),这是一个非常高的时间复杂度。
冒泡排序——PowerShell版的更多相关文章
- Ladon内网渗透扫描器PowerShell版
程序简介 Ladon一款用于大型网络渗透的多线程插件化综合扫描神器,含端口扫描.服务识别.网络资产.密码爆破.高危漏洞检测以及一键GetShell,支持批量A段/B段/C段以及跨网段扫描,支持URL. ...
- 冒泡排序快速版(C)
冒泡排序C语言版:在每轮排序中检查时候有元素位置交换,如果无交换,说明数组元素已经有序,无需继续排序 #include <stdio.h> #include <stdlib.h> ...
- 快速排序——PowerShell版
继续读啊哈磊算法有感系列,继续升华.上一篇是冒泡排序,在结尾总结了一下冒泡排序的缺点——时间复杂度O(N*N)太大.这一篇来说一下快速排序,快速排序可以在多数情况下克服冒泡排序的缺点(最坏的情况下和冒 ...
- [工具]法国神器mimikatz 2.1.1 一键版 & PowerShell版
无需任何参数,运行EXE即可自动读取Windows系统密码 EXE版需要其它功能请使用原版 (参数已写死仅读密码) 结果保存于当前目录mz.log EXE https://github.com/k8g ...
- 链表——PowerShell版
链表是由一系列节点串连起来组成的,每一个节点包括数值部分和指针部分,上一节点的指针部分指向下一节点的数值部分所在的位置. 在C语言中我们有两种方式来定义链表—— 1.定义结构体:来表示链表中的节点,节 ...
- 栈——PowerShell版
上一篇讲过队列(queue),队列就像是居民楼里的垃圾管道,从楼道的垃圾管道的入口处将垃圾扔进去,清洁工会从一楼垃圾管道的出口处将垃圾拿走.每一层的垃圾通道入口与一楼的垃圾管道出口之间都形成了一个队列 ...
- 求职基础复习之冒泡排序c++版
代码中在第一层循环中增加一个bool值,是为了防止在排序完成后还继续无谓的比较,最多会有(n-1)*(n-2)/2次循环. #include<iostream> using namespa ...
- 冒泡排序 JAVA版
冒泡排序 算法思想是每次从数组末端开始比较相邻俩元素,把第i小的冒泡到数组的第i个位置.i从0一直到N-1从而完成排序.当然也可以从数组开始端开始比较相邻两元素,把第i大的冒泡到第N-i个位置.I从0 ...
- 批量备份数据库脚本(PowerShell版)
开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...
随机推荐
- Java中初级数值类型的大小, volatile和包装类wrapped type的比较
Java中的初级数值类型 Java是静态类型语言, 所有的变量必须先声明再使用. 其初级类型一共8种: boolean: 数据只包含1bit信息, 但是占空间为8-bit, 默认值为false byt ...
- 微信小程序基于swiper组件的tab切换
代码地址如下:http://www.demodashi.com/demo/14010.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- CentOS安装配置Samba
介绍 Samba可以让我们在windows中访问linux系统中的文件,如果用来调试linux虚拟机中的代码会非常的方便 1.安装 yum -y update yum install samba sa ...
- HDUOJ---1754 Minimum Inversion Number (单点更新之求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 解决修改计算机名后tfs连接不上的错误
1,用vs 自带的工具命令 tf workspaces 查看集合 2,执行命令: >tf workspaces /collection:https://aaaa.visualstudio.com ...
- WinForm中变Enter键为Tab键实现焦点转移的方法
if (e.KeyCode == Keys.Enter) { //this.SelectNextControl(this.ActiveControl,true, true, true, true); ...
- ubuntu 16.04 apt-get 更新使用中科大镜像源
1 备份系统配置 sudo cp /etc/apt/sources.list /etc/apt/source.list.bak 2 编辑配置 sudo vi /etc/apt/sources.list ...
- 关于 二维码 与 NFC 之间的出身贫贱说
关于 二维码 与 NFC 之间的出身贫贱说 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...
- Bash Shell启动配置脚本的顺序
1.Bash检查环境变量文件的方式,取决于系统运行Shell的方式,通常系统运行Shell有3种方式: )通过系统用户登陆后默认运行的Shell )非登陆交互式运行Shell )执行脚本运行非交互式S ...
- Gcc\MingW\Cygwin\Msys简介
一.GCC的历史GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的移植版本.所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西.所 ...