冒泡排序——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). ...
随机推荐
- 【Docker】常用命令
1.查看正在运行的容器 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND ...
- css中clear属性的认识
今天在看博客园的页面布局时发现有不少空白的div只有css属性:clear:both. 然后去W3C文档里和百度补脑了一下,总结如下: 这是之前我写的一段测试代码: <div style=&qu ...
- webservice系统学习笔记4-使用工具查看SOAP消息
使用myeclipse的WTP java ee视图里的[web services Explorer]来测试查看webservice传输的SOAP消息 1. 2. 测试getUserByUsername ...
- 19、Java访问修饰符
修饰符 本类 同一个包中的类 子类 其它类 public 可以访问 可以访问 可以访问 可以访问 protected 可以访问 可以访问 可以访问 不能访问 默认 可以访问 可以访问 不能访问 不能访 ...
- jQuery正则:电话、身份证、邮箱简单校验
if (!(/^1[3,5,6,7,8,9]\d{9}$/).test(e.detail.value.data_phone)) { wx.showToast({ title: '请输入有效11位手机号 ...
- IDEA编辑区光标样式修改
转自:http://blog.csdn.net/aosica321/article/details/52787418 Intellj IDEA光标为insert状态,无法删除内容以前用得是社区版的ID ...
- HDUOJ---Piggy-Bank
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Android干坏事——禁止设备休眠
实现这一功能的方法有两种,一种是在Manifest.xml文件里面声明,一种是在代码里面修改LayoutParams的标志位.具体如下: 1.在Manifest.xml文件里面用user-permis ...
- 关于JavaScript中Get/Set访问器
有时候大家可能会纳闷,在使用JavaScript的时候,只需要给一个系统变量赋值就可以触发一系列操作去相应. 但是我们在写Js的时候,修改了一个自定义变量,却连个P都没有.是不是很郁闷呢? 其实,我们 ...
- python学习笔记——multiprocessing 多进程中的重构方法__init__
重构: import multiprocessing import time class ClockProcesses(multiprocessing.Process): def __init__(s ...