搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 有琦度 > 简简单单的冒泡排序和选择排序-01

简简单单的冒泡排序和选择排序-01

有琦度 2018-10-29

阅读本文大约需要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 = [1232671396890121]
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 = [1232671396890121]
16    print(li)
17    select_sort(li)
18    print(li)


实现效果:




  4


后面马上要讲到插入排序和希尔排序,以及快速排序等。其实他们的相关性还是比较大的。有兴趣的话而已提前了解一下。


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《简简单单的冒泡排序和选择排序-01》的版权归原作者「Python的渐进之路」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Python的渐进之路微信公众号

Python的渐进之路微信公众号:python_up

Python的渐进之路

手机扫描上方二维码即可关注Python的渐进之路微信公众号

Python的渐进之路最新文章

精品公众号随机推荐