排序与搜索
排序算法(英语:Sorting algorithm)是⼀种能将⼀串数据依照特定顺序进⾏ 排列的⼀种算法。
排序算法的稳定性
稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如 果⼀个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表 中R出现在S之前,在排序过的列表中R也将会是在S之前。
当相等的元素是⽆法分辨的,⽐如像是整数,稳定性并不是⼀个问题。然 ⽽,假设以下的数对将要以他们的第⼀个数字来排序。
(4, 1) (3, 1) (3, 7)(5, 6)
在这个状况下,有可能产⽣两种不同的结果,⼀个是让相等键值的纪录维持 相对的次序,⽽另外⼀个则没有:
(3, 1) (3, 7) (4, 1) (5, 6) (维持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改变)
不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序 算法从来不会如此。不稳定排序算法可以被特别地实现为稳定。作这件事情 的⼀个⽅式是⼈⼯扩充键值的⽐较,如此在其他⽅⾯相同键值的两个对象间 之⽐较,(⽐如上⾯的⽐较中加⼊第⼆个标准:第⼆个键值的⼤⼩)就会被 决定使⽤在原先数据次序中的条⽬,当作⼀个同分决赛。然⽽,要记住这种 次序通常牵涉到额外的空间负担。
排序与搜索
54
冒泡排序
冒泡排序(英语:Bubble Sort)是⼀种简单的排序算法。它重复地遍历要排 序的数列,⼀次⽐较两个元素,如果他们的顺序错误就把他们交换过来。遍 历数列的⼯作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序 完成。这个算法的名字由来是因为越⼩的元素会经由交换慢慢“浮”到数列的 顶端。
冒泡排序算法的运作如下:
⽐较相邻的元素。如果第⼀个⽐第⼆个⼤(升序),就交换他们两个。 对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对。这 步做完后,最后的元素会是最⼤的数。 针对所有的元素重复以上的步骤,除了最后⼀个。 持续每次对越来越少的元素重复上⾯的步骤,直到没有任何⼀对数字需 要⽐较。
冒泡排序的分析
交换过程图示(第⼀次):
[AppleScript] 纯文本查看 复制代码 def bubble_sort(alist): for j in range(len(alist)-1,0,-1): # j表示每次遍历需要⽐较的次数,是逐渐减⼩的
[AppleScript] 纯文本查看 复制代码 for i in range(j): if alist[i] > alist[i+1]: alist[i], alist[i+1] = alist[i+1], alist[i]
li = [54,26,93,17,77,31,44,55,20] bubble_sort(li) print(li)
时间复杂度
最优时间复杂度:O(n) (表示遍历⼀次发现没有任何可以交换的元素, 排序结束。) 最坏时间复杂度:O(n ) 稳定性:稳定
冒泡排序的演示
|
|