继续读啊哈磊算法有感系列。上一篇是桶排序,在结尾总结了一下简化版桶排序的缺点。这一篇来说一下冒泡排序,冒泡排序可以很好的克服桶排序的缺点。下面我们先来说说冒泡排序的过程与思想——

冒泡排序的过程:

第一轮排序:如果有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版的更多相关文章

  1. Ladon内网渗透扫描器PowerShell版

    程序简介 Ladon一款用于大型网络渗透的多线程插件化综合扫描神器,含端口扫描.服务识别.网络资产.密码爆破.高危漏洞检测以及一键GetShell,支持批量A段/B段/C段以及跨网段扫描,支持URL. ...

  2. 冒泡排序快速版(C)

    冒泡排序C语言版:在每轮排序中检查时候有元素位置交换,如果无交换,说明数组元素已经有序,无需继续排序 #include <stdio.h> #include <stdlib.h> ...

  3. 快速排序——PowerShell版

    继续读啊哈磊算法有感系列,继续升华.上一篇是冒泡排序,在结尾总结了一下冒泡排序的缺点——时间复杂度O(N*N)太大.这一篇来说一下快速排序,快速排序可以在多数情况下克服冒泡排序的缺点(最坏的情况下和冒 ...

  4. [工具]法国神器mimikatz 2.1.1 一键版 & PowerShell版

    无需任何参数,运行EXE即可自动读取Windows系统密码 EXE版需要其它功能请使用原版 (参数已写死仅读密码) 结果保存于当前目录mz.log EXE https://github.com/k8g ...

  5. 链表——PowerShell版

    链表是由一系列节点串连起来组成的,每一个节点包括数值部分和指针部分,上一节点的指针部分指向下一节点的数值部分所在的位置. 在C语言中我们有两种方式来定义链表—— 1.定义结构体:来表示链表中的节点,节 ...

  6. 栈——PowerShell版

    上一篇讲过队列(queue),队列就像是居民楼里的垃圾管道,从楼道的垃圾管道的入口处将垃圾扔进去,清洁工会从一楼垃圾管道的出口处将垃圾拿走.每一层的垃圾通道入口与一楼的垃圾管道出口之间都形成了一个队列 ...

  7. 求职基础复习之冒泡排序c++版

    代码中在第一层循环中增加一个bool值,是为了防止在排序完成后还继续无谓的比较,最多会有(n-1)*(n-2)/2次循环. #include<iostream> using namespa ...

  8. 冒泡排序 JAVA版

    冒泡排序 算法思想是每次从数组末端开始比较相邻俩元素,把第i小的冒泡到数组的第i个位置.i从0一直到N-1从而完成排序.当然也可以从数组开始端开始比较相邻两元素,把第i大的冒泡到第N-i个位置.I从0 ...

  9. 批量备份数据库脚本(PowerShell版)

    开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...

随机推荐

  1. 【laravel5.4】自定义404、503等页面

    1.处理自定义错误或不存在页面:生产环境一定要关闭debug模式. public function render($request, Exception $exception) { if ($exce ...

  2. EasyUI 条件设置行背景颜色

    数据网格(datagrid)的 rowStyler 函数的设计目的是允许您自定义行样式. rowStyler 函数需要两个参数: rowIndex:行的索引,从 0 开始. rowData:该行相应的 ...

  3. PHP中的一些安全配置

    PHP中的配置至关重要,包含php.ini的配置,还有系统权限的配置,一下是我总结的一些配置 一.PHP的模块 ./configure \ --with-libdir=lib64 \ --prefix ...

  4. HDUOJ-----4510 小Q系列故事——为什么时光不能倒流

    小Q系列故事——为什么时光不能倒流 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)T ...

  5. HDUOJ----(1031)Design T-Shirt

    Design T-Shirt Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  6. php Zend虚拟机

    在前⾯的章节中,我们了解到⼀个PHP⽂件在服务器端的执⾏过程包括以下两个⼤的过程:1. 递给php程序需要执⾏的⽂件, php程序完成基本的准备⼯作后启动PHP及Zend引擎, 加载注册的扩展模块.2 ...

  7. Android开发学习之Gallery和GridView浅析

    一.Gallery的简介 Gallery(画廊)是一个锁定中心条目并且拥有水平滚动列表的视图,一般用来浏览图片,并且可以响应事件显示信息.Gallery还可以和ImageSwitcher组件结合使用来 ...

  8. selenium2.0关于python的常用函数

    转: 新建实例driver = webdriver.Chrome() 1.获取当前页面的Url函数 方法:current_url 实例: driver.current_url 2.获取元素坐标 方法: ...

  9. 乙醇的webdriver实用指南ruby版本

    webdriver实用指南是乙醇2013年分享计划的一部分,作为对已逝去的selenium2时代的追忆. 目录如下 启动浏览器 关闭浏览器 浏览器最大化 设置浏览器大小 访问链接 打印当前页面的tit ...

  10. ArcMap导入数据到ArcSDE报000597或者000224的错误

    这两天碰到不同用户提出的不同的问题,可是分析之后发现导致该问题的解决办法是同一个原因. -------------------------------------------------------- ...