Python排序算法动态图形化演示(实现代码)

 

1、冒泡排序

冒泡排序是最简单也是最容易理解的排序方法,其原理就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

 1 # 冒泡排序
 2 def bubbleSort(li):
 3     n = len(li)
 4     for i in range(n-1):
 5         for j in range(n-i-1):
 6             if li[j] > li[j+1]:
 7                 li[j],li[j+1] = li[j+1],li[j]
 8
 9 if __name__ == ‘__main__‘:
10     li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
11     bubbleSort(li)
12     print(li)

2、选择排序

基本思想:第1趟,在待排序记录r1 ~ r[n]中选出最小的记录,将它与r1交换;第2趟,在待排序记录r2 ~ r[n]中选出最小的记录,将它与r2交换;以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

 1 # 选择排序
 2 def selectSort(li):
 3     n = len(li)
 4     for i in range(n):
 5         temp = i
 6         for j in range(temp,n):
 7             if li[temp] > li[j]:
 8                 li[temp],li[j] = li[j],li[temp]
 9
10 if __name__ == ‘__main__‘:
11     li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
12     selectSort(li)
13     print(li)

3、快速排序

使用了分治法策略以及递归实现,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

 1 # 快速排序
 2 def quickSort(li):
 3     if li:
 4         mark=li[0]
 5         little=[m for m in li if m<mark]
 6         big=[x for x in li if x>mark]
 7         return quickSort(little)+[mark]+quickSort(big)
 8     else:
 9         return []
10 if __name__==‘__main__‘:
11     li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
12     print(quickSort(li))

4、插入排序

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

 1 # 插入排序
 2 def insertSort(li):
 3     length = len(li)
 4     for i in range(1,length):
 5         x = li[i]
 6         for j in range(i,-1,-1):
 7             # j为当前位置,试探j-1位置
 8             if x < li[j-1]:
 9                 li[j] = li[j-1]
10             else:
11                 # 位置确定为j
12                 break
13         li[j] = x
14
15 if __name__ == ‘__main__‘:
16     li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
17     insertSort(li)
18     print(li)

原文地址:https://www.cnblogs.com/kadycui/p/9771695.html

时间: 2024-10-12 07:25:46

Python排序算法动态图形化演示(实现代码)的相关文章

python排序算法实现(冒泡、选择、插入)

python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)): for j in range((i+1),len(s)): s[i],s[j]=min(s[i],s[j]),max(s[i],s[j]) #print count print s 2.选择排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(l

【制作表情包】Python拆分和合并GIF动态图(几行代码就搞定)

“表情包”是当前社交软件上不可或缺的交流方式,难以用文字表达的意思,发一个“表情包”,对方就能心领神会.下面是小派制作的一个表情包,准确地讲,是在已有表情包的基础上,二次加工而成的. 下面以最简单的代码形式(10行左右),介绍上述“表情包”的制作过程.第一,将GIF动态图拆分成图形帧.下图是网络上找到的一个GIF格式动态图. 利用Python将上述GIF格式动态图拆分图形帧,只需要输入以下代码.其中第1-2行是导入os库.从PIL库中导入Image函数功能.第3行是Image.open打开位于D

python+QT designer 做图形化界面EXE程序

1.安装python 2.安装QT designer 或QT creator 3.打开QT designer 绘制你想要的图形化界面 类似这样 之后将文件保存,以ui后缀形式保存 4.下载安装pyside 直接easy_install 或pip安装 可能会保存,我安装的时候,提示 msvc 版本问题 查看许多国外论坛后,可以选择,pyside网站下载 对应Python版本的 whl安装包,下载成功之后,进入对应目录路径,直接 pip install  *.whl    *为包名 安装成功 5.将

[python] 排序的动态展示

两句闲话 本文所说的排序是指基于交换的排序.因此,按理来说,本文应该叫基于交换的排序的动态展示,但是这样太拗口了. 效果展示 最终效果如下. 实现方法 需要说明的是,在这里是通过pygame来实现图形界面:程序使用python 3.5编写.使用pygame的好处在于,它非常自由(当然也非常麻烦). 我们一共需要编写四个文件:draw.py,sort_show.py,sort.py,main.py. 1.draw.py 在这里,我们先在draw.py中写一个Draw类,以实现pygame生成界面的

python排序算法之冒泡,选择,插入

1.参考 一本关于排序算法的 GitBook 在线书籍 <十大经典排序算法>,使用 JavaScript & Python & Go 实现 2.冒泡排序:两两比较,互换位置 arr = [9,8,2,23,3] # 冒泡排序 两两比较,互换位置 # 3 5 9 1 8 # A B C D E # 3 5 9 1 8 # 3 5 9 1 8 # 3 5 1 9 8 # 3 5 1 8 9 # 第一轮比较将最大数排到最后,5个数总共需要4轮即1,2,3,4 # 比较是arr[j]

十大排序算法--多图预警

十大排序算法 十大排序算法 简单的排序算法 插入排序 冒泡排序 选择排序 高效的比较排序算法 希尔排序 快速排序 归并排序 堆排序 牺牲空间的线性排序算法 计数排序 桶排序 基数排序 综合分析 简单的排序算法 Θ(n^2) 插入排序 动画演示 enter description here 原理 将数组看成两部分,一部分为已排序好的数组,后面的部分为未排序数组,每次从后面的数组中取出元素与前面的有序元素一一比较,若小于则向前移动,直到找到正确的位置插入.遍历后面的数组直到整个数组排序完成. 代码

十大经典排序算法详细总结(含JAVA代码实现)

原文出处:http://mp.weixin.qq.com/s/feQDjby4uYGRLbYUJq7Lpg 0.排序算法说明 0.1 排序的定义 对一序列对象根据某个关键字进行排序. 0.2 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排序操作都在内存中完成: 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行: 时间复杂度: 一个算法执行所耗费的时

拓扑排序算法原理以及完整的C代码实现

拓扑排序定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前.通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列.简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序. 基础知识 一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity).在整个

排序算法的基本思想和OC代码实现

算法的基本思想和OC代码实现 一 .冒泡排序   (平均时间复杂度 o(N*N))  基本思想:两个数比较大小,较大的数下沉,较小的数冒起来. 过程:比较相邻的两个数据,如果第二个数小,就交换位置 从后向前两两比较,一直到比较最前两个数据.最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了. 继续重复上述过程,依次将第2,3,….,n-1个最小数排好位置. int arr[5]={23,21,45,23,64}; int temp; for (int i=0; i<4; i++) {