简简单单的冒泡排序和选择排序-01
Posted 有琦度
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简简单单的冒泡排序和选择排序-01相关的知识,希望对你有一定的参考价值。
阅读本文大约需要4分钟
1
无论是在工作还是学习,我们都或多或少的被问及排序的问题。其实排序在我们花上一点时间系统的去学习一下其方法还是很有必要的。
今天开始我将会分为三期具体的给大家讲讲排序的原理以及实现
2
先问大家一个简单的问题:怎样将列表里面的数据去重?
得益于python的优势,熟悉的人都会想到利用python里面特有的set(),也就是集合的特性--不重复。但是大家有没有想过一个问题。就是在集合之后我们的列表变成了无序的状态。这就缺失了稳定性。而对于利用下标进行索引的列表来说这个方法其实并不实用。
说这个的原因就在于我们的列表顺序十分的重要,所以列表的排序也是一种你要了解的排序算法
3
冒泡排序:
听的最多的估计就是这个冒泡排序了,简单的来说就是重复遍历的要排序的数列,一次比较两个元素,如果他们顺序不是先小后大(或者先大后小)就将他们的顺序调换过来。遍历重复的进行知道没有在进行交换。就像鱼吐泡泡一样,最终最大的将被吐到最上面。
网上随便搜一下就会有很多的实现代码,我想大家跟着我的思想走一下看看。是不是我们上次文章所说到的两次for遍历?你可能觉得毫无相关的东西其实就是相通的。首先我们要比较第1个元素和第2个元素的大小,之后第2个和第3个,,,以此比较到最后,完成一轮交换;然后在开始第1个和第2个,,,
注意两点:
1、怎么快速交换两个元素?
a,b =b,a (多少人觉得简单但是没想到用)
2、内层遍历的终点位置?
第一个遍历排序的n是最大值,那么第二次遍历终点位置到n-1就行了,
看,是不是和我们上次文章写的方法一样?
1def bubble_sort(a_list):
2 '''
3 冒泡排序
4 '''
5 n = len(a_list)
6
7 for j in range(n - 1):
8 for i in range(0, n - 1 - j):
9 if a_list[i] > a_list[i + 1]:
10 a_list[i], a_list[i + 1] = a_list[i + 1], a_list[i]
11
12
13if __name__ == '__main__':
14 li = [12, 32, 67, 13, 9, 68, 90, 121]
15 print(li)
16 bubble_sort(li)
17 print(li)
实现效果:
选择排序:
这个时候我们假设给定的一个列表中先开辟一个空间(假设的),原列表的元素都站在空间外面,我们先遍历这些元素拿到最小(大)值,把它取出来放到开辟的空间中的第一位。然后在遍历这些元素的再取出最小(大)值。至于怎么移动到这些位置上也是通过交换位置上面的数据(a,b=b,a)
1def select_sort(alist):
2 '''
3 选择排序
4 '''
5 n = len(alist)
6 for j in range(n - 1):
7 min_index = j
8 for i in range(j + 1, n):
9 if alist[min_index] > alist[i]:
10 min_index = i
11 alist[j], alist[min_index] = alist[min_index], alist[j]
12
13
14if __name__ == '__main__':
15 li = [12, 32, 67, 13, 9, 68, 90, 121]
16 print(li)
17 select_sort(li)
18 print(li)
实现效果:
4
后面马上要讲到插入排序和希尔排序,以及快速排序等。其实他们的相关性还是比较大的。有兴趣的话而已提前了解一下。
拜
以上是关于简简单单的冒泡排序和选择排序-01的主要内容,如果未能解决你的问题,请参考以下文章
几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)
总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)
Java算法 -- 选择排序冒泡排序插入排序前缀和数组Java中的Math.random()函数01不等概率随机到01等概率随机从[1,5]随机到[1,7]随机对数器的使用
Java算法 -- 选择排序冒泡排序插入排序前缀和数组Java中的Math.random()函数01不等概率随机到01等概率随机从[1,5]随机到[1,7]随机对数器的使用
Java算法 -- 选择排序冒泡排序插入排序前缀和数组Java中的Math.random()函数01不等概率随机到01等概率随机从[1,5]随机到[1,7]随机对数器的使用
Java算法 -- 选择排序冒泡排序插入排序前缀和数组Java中的Math.random()函数01不等概率随机到01等概率随机从[1,5]随机到[1,7]随机对数器的使用