包牛牛批发网,澳门网上平台注册

怎么用python来实现排序算法的可视化的?
更新时间:2020年08月25日03时37分23秒

怎么用python来实现排序算法的可视化的?

作者:包牛牛批发网 2020年08月25日03时37分23秒分类: 计算机专业学校

摘要: 怎么用python来实现排序算法的可视化的? 为你介绍:Python培训机构粤嵌科技表示,在人工智能化的时代,现在的python已经成为开发行业比较吃香的一门开发语言了。对于...

Python培训机构粤嵌科技表示,在人工智能化的时代,现在的python已经成为开发行业比较吃香的一门开发语言了。对于想要学习python的人来说当然是想要了解更多关于python技术方面的知识点了,下面粤嵌科技的小编就来给大家整理一篇关于怎么用python来实现排序算法可视化技术,让大家可以更加直观的了解python。

 怎么用python来实现排序算法的可视化的?

python

 怎么用python来实现排序算法的可视化的?

包牛牛批发网,澳门网上平台注册  一、如何表示数组


包牛牛批发网,澳门网上平台注册  python提供了list类型,很方便可以表示C++中的数组。标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间,再次就不详细论述。


包牛牛批发网,澳门网上平台注册  二、如何得到随机采样数组,数组有无重复数据


包牛牛批发网,澳门网上平台注册  假设我希望数组长度是100,而且我希望数组的大小也是在[0,100)内,那么如何得到100个随机的整数呢?可以用random库。


  示例代码:


  import random


  data = list(range(100))


  data = random.choices(data, k=100)


包牛牛批发网,澳门网上平台注册  print(data)


包牛牛批发网,澳门网上平台注册  [52, 33, 45, 33, 48, 25, 68, 28, 78, 23, 78, 35, 24, 44, 69, 88, 66, 29, 82, 77, 84, 12, 19, 10,


包牛牛批发网,澳门网上平台注册  27, 24, 57, 42, 71, 75, 25, 1, 77, 94, 44, 81, 86, 62, 25, 69, 97, 86, 56, 47, 31, 51, 40, 21, 41,


包牛牛批发网,澳门网上平台注册  21, 17, 56, 88, 41, 92, 46, 56, 80, 23, 70, 49, 96, 83, 54, 16, 36, 82, 24, 68, 60, 16, 98, 16, 81,


  10, 13, 11, 24, 68, 35, 56, 39, 23, 44, 6, 30, 3, 60, 56, 66, 38, 28, 47, 47, 25, 90, 89, 38, 68,


  21]


  但是以上代码有个问题,random.choices是对一个序列进行重复采样,得到的数组存在重复数据,那如果不希望存在重复数据,而是希望进行无重复采样,怎么办?


  可以用random.sample函数,示例代码:


包牛牛批发网,澳门网上平台注册  data = random.sample(data, k=100)


  print(data)


  [49, 28, 56, 28, 44, 62, 81, 25, 48, 33, 54, 38, 30, 16, 13, 19, 23, 56, 60, 66, 41, 24, 68, 68,


  77, 92, 78, 24, 66, 3, 80, 94, 78, 41, 84, 88, 21, 56, 25, 25, 75, 24, 38, 82, 31, 52, 23, 10,


包牛牛批发网,澳门网上平台注册  71, 40, 27, 46, 33, 35, 56, 51, 1, 23, 12, 25, 89, 16, 21, 21, 11, 42, 47, 44, 81, 35, 86, 88,


  29, 36, 77, 16, 39, 6, 57, 69, 96, 68, 24, 86, 97, 90, 69, 10, 68, 98, 56, 44, 83, 47, 70, 17,


包牛牛批发网,澳门网上平台注册  47, 82, 60, 45]


包牛牛批发网,澳门网上平台注册  这样就可以得到无重复采样数据了。


包牛牛批发网,澳门网上平台注册  三、如何实现排序算法


  算法种类较多,就不一一举例;再次就以希尔排序(Shell Sort)为例讲讲:


包牛牛批发网,澳门网上平台注册  尔排序的原理:希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。


  希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。


包牛牛批发网,澳门网上平台注册  基础的插入法排序是两重循环,希尔排序是三重循环,最外面一重循环,控制增量gap,并逐步减少gap的值。二重循环从下标为gap的元素开始比较,依次逐个跨组处理。最后一重循环是对组内的元素进行插入法排序。这样进行排序的优点在于每次循环,整个序列的元素都将小元素的值逐步向前移动,数值比较大的值向后移动。


  示例代码:


  from data import DataSeq


  def ShellSort(ds):


  assert isinstance(ds, DataSeq), "Type Error"


包牛牛批发网,澳门网上平台注册  Length = ds.length


  D = Length//2


包牛牛批发网,澳门网上平台注册  while D>0:


  i=0


  while i<Length:


  tmp = ds.data[i]


  j=i


  while j>=1 and ds.data[j-D]>tmp:


  ds.SetVal(j, ds.data[j-D])


  j-=D


  ds.SetVal(j, tmp)


  i+=D


  D//=2


包牛牛批发网,澳门网上平台注册  if __name__ == "__main__":


  ds=DataSeq(64)


  ds.Visualize()


  ds.StartTimer()


  ShellSort(ds)


包牛牛批发网,澳门网上平台注册  ds.StopTimer()


  ds.SetTimeInterval(0)


  ds.Visualize()


  四、如何把数组可视化出来


包牛牛批发网,澳门网上平台注册  有了随机数组初始化方法,再实现好排序函数,我们还差一步,就是把排序函数中每次移动数组后将数组可视化并输出。


  对数组进行可视化,很容易想到python的可视化工具matplotlib!但是在项目中我并没有用matplotlib,而是用了numpy+opencv。


  为什么不用matplotlib?


#p#分页标题#e#

包牛牛批发网,澳门网上平台注册  因为在排序过程中,每次修改数组,都希望能够实时修改图片并输出,matplotlib确实很方便,但是matplotlib的效率实在是不高,而且每次修改数组前后的两幅图片其实是差不多的。如果用matplotlib,每次都是要重新绘制图片,非常耗时!


包牛牛批发网,澳门网上平台注册  所以考虑自己生成图片,在每次修改数组后,只将图片中改动的那两列进行修改即可!这样就比用matplotlib每次重新绘制图片效率高得多!


  数组中主要有两种操作,一种是对某个idx赋值,一种是交换某两个idx的值。


  示例代码:


包牛牛批发网,澳门网上平台注册  class DataSeq:


  WHITE = (255,255,255)


包牛牛批发网,澳门网上平台注册  RED = (0,0,255)


  BLACK = (0,0,0)


包牛牛批发网,澳门网上平台注册  YELLOW = (0,127,255)


  def __init__(self, Length, time_interval=1, sort_title="Figure", repeatition=False):


  pass


包牛牛批发网,澳门网上平台注册  def Getfigure(self):


  _bar_width = 5


  figure = np.full((self.length*_bar_width,self.length*_bar_width,3), 255,dtype=np.uint8)


包牛牛批发网,澳门网上平台注册  for i in range(self.length):


包牛牛批发网,澳门网上平台注册  val = self.data[i]


包牛牛批发网,澳门网上平台注册  figure[-1-val*_bar_width:, i*_bar_width:i*_bar_width+_bar_width] = self.GetColor(val, self.length)


  self._bar_width = _bar_width


包牛牛批发网,澳门网上平台注册  self.figure = figure


  def _set_figure(self, idx, val):


包牛牛批发网,澳门网上平台注册  min_col = idx*self._bar_width


  max_col = min_col+self._bar_width


  min_row = -1-val*self._bar_width


包牛牛批发网,澳门网上平台注册  self.figure[ : , min_col:max_col] = self.WHITE


  self.figure[ min_row: , min_col:max_col] = self.GetColor(val, self.length)


  def SetVal(self, idx, val):


  self.data[idx] = val


  self._set_figure(idx, val)


包牛牛批发网,澳门网上平台注册  self.Visualize((idx,))


  def Swap(self, idx1, idx2):


  self.data[idx1], self.data[idx2] = self.data[idx2], self.data[idx1]


包牛牛批发网,澳门网上平台注册  self._set_figure(idx1, self.data[idx1])


包牛牛批发网,澳门网上平台注册  self._set_figure(idx2, self.data[idx2])


  self.Visualize((idx1, idx2))


  以上就是粤嵌科技的小编给大家整理的关于怎么用python来实现排序算法的可视化的文章了。如果说你想要了解更多关于python技术上面的问题的话,那么可以点击我们文章下面的获取试听资格按钮来获取和我们python讲师面对面交流的机会,可以解答你更多的疑惑。

  • 姓名:
  • 专业:
  • 层次: 分数:
  • 电话:
  • 微信:
  • 地址:

本文标题: 怎么用python来实现排序算法的可视化的?
本文链接:http://mauiwowitiki.com//plus/view.php?aid=208298
当前位置: 包牛牛批发网 > 专业学校 > 计算机专业学校 > 怎么用python来实现排序算法的可视化的?
温馨提示如有转载或引用以上内容之必要,敬请将本文衔接 作为出处标注,谢谢合作!
包牛牛批发网

欢迎使用手机扫描访问本站

威尼斯人手机版app,精品电玩城街机捕鱼奥门新萄京83855com,赢话费水果机vip8455新葡萄娱乐官网,奥门金沙皇冠a牛牛赚钱游戏下载,威尼斯9778官方网站2019最新金花牛牛平台,欢乐斗牛下载官方下载