# coding=utf-8
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import * class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.setWindowTitle(u'算法实现')
self.setWindowIcon(QIcon('image/5.png')) #设置输入数据窗口&数据输出窗口
in_out_putDock=QDockWidget(u'输入输出')
in_out_putDock_workspace=QWorkspace()
in_out_putDock.setWidget(in_out_putDock_workspace)
label_in=QLabel(u'输入数据窗口,数据以“,”分隔')
label_out=QLabel(u'输出数据窗口')
self.inTextEdit=QTextEdit()
self.outTextEdit=QTextEdit()
layout=QGridLayout()
layout.addWidget(label_in,0,0)
layout.addWidget(self.inTextEdit,1,0,1,4)
layout.addWidget(label_out,2,0)
layout.addWidget(self.outTextEdit,3,0,1,4)
in_out_putDock_workspace.setLayout(layout)
self.addDockWidget(Qt.LeftDockWidgetArea,in_out_putDock) #设置算法(algorithm)按钮及运行时间显示控件
algori_Dock=QDockWidget(u'各类算法')
algori_Dock_workspace=QWorkspace()
algori_Dock.setWidget(algori_Dock_workspace)
self.clearButton=QPushButton(u'清除输出框内容')
self.clear_in_Button=QPushButton(u'清除输入框内容')
self.insert_sort_Button=QPushButton(u'插入升序算法')
self.merge_Button=QPushButton(u'分治递归升序算法')
self.bubble_Button=QPushButton(u'冒泡升序算法')
time_label=QLabel(u'算法运行时间: ')
self.runTime_label=QLabel()
self.runTime_label.setFrameShape(QFrame.Box)
layout2=QGridLayout()
layout2.addWidget(time_label,0,0)
layout2.addWidget(self.runTime_label,0,1)
layout2.addWidget(self.clearButton,1,0,1,1)
layout2.addWidget(self.clear_in_Button,1,1,1,1)
layout2.addWidget(self.insert_sort_Button,2,0,1,1)
layout2.addWidget(self.merge_Button,2,1,1,1)
layout2.addWidget(self.bubble_Button,3,0,1,1)
layout2.setRowStretch(4,1)
algori_Dock_workspace.setLayout(layout2)
self.addDockWidget(Qt.RightDockWidgetArea,algori_Dock) #将按钮与动作相连
self.connect(self.insert_sort_Button,SIGNAL('clicked()'),self.insertSortUp)
self.connect(self.clearButton,SIGNAL('clicked()'),self.clearInOutEdit)
self.connect(self.merge_Button,SIGNAL('clicked()'),self.MergeSortUp)
self.connect(self.clear_in_Button,SIGNAL('clicked()'),self.clearInEdit)
self.connect(self.bubble_Button,SIGNAL('clicked()'),self.bubbleSortUp) #从输入文本框中获取文本并返回数字列表
def getData(self):
textData=self.inTextEdit.document()
textData_str=textData.toPlainText()
data=str(textData_str).split(',')
data_f=[]
for i in range(len(data)):
data_f.append(float(data[i]))
return data_f def showResult(self,pname,runcount,time,data):
tex=pname+u': ||运行时间为:'+str(time)+u' 毫秒 ||运行所用循环执行次数为:'+str(runcount)+u' 次||运行结果为: '+str(data)
self.outTextEdit.append(tex)
self.runTime_label.setText(str(time)+u'毫秒') def insertSortUp(self):
run_time=QTime()
run_time.start()
data=self.getData()
runcount=0
#插入排序算法
j=1
for j in range(len(data)):
key=data[j]
i=j-1
while i>=0 and data[i]>key:
data[i+1]=data[i]
i-=1
runcount+=1
data[i+1]=key spend_time=run_time.elapsed()
self.showResult(u'插入升序算法',runcount,spend_time,data) def clearInOutEdit(self):
self.outTextEdit.clear() def clearInEdit(self):
self.inTextEdit.clear() #分治递归合并两个数组
def Merge(self,data,p,q,r,runcount):
n1=q-p+1
n2=r-q
L=[]
R=[]
for i in range(n1):
L.append(data[p+i-1])
runcount+=1
for j in range(n2):
R.append(data[q+j])
runcount+=1
L.append(1000000000)
R.append(1000000000)
a=0
b=0
k=p
#self.outTextEdit.append(str(L)+'+'+str(R))
while k<=r:
if L[a]<R[b]:
data[k-1]=L[a]
a+=1
else:
data[k-1]=R[b]
b+=1
k+=1
runcount+=1 #递归主函数
def MergeSort(self,data,p,r,runcount):
if p<r:
q=int((p+r)/2)
self.MergeSort(data,p,q,runcount)
self.MergeSort(data,q+1,r,runcount)
self.Merge(data,p,q,r,runcount)
runcount+=1 #递归按钮动作
def MergeSortUp(self):
run_time1=QTime()
run_time1.start()
data=self.getData()
runcount=0
self.MergeSort(data,1,len(data),runcount)
spend_time=run_time1.elapsed()
self.showResult(u'分治递归升序算法',runcount,spend_time,data) #冒泡排序算法
def bubbleSortUp(self):
run_time_bubble=QTime()
run_time_bubble.start()
data=self.getData()
runcount=0
for i in range(len(data)):
j=len(data)-1
while j>i:
if data[j]<data[j-1]:
temp=data[j]
data[j]=data[j-1]
data[j-1]=temp
runcount+=1
j-=1 spend_time_bubble=run_time_bubble.elapsed()
self.showResult(u'冒泡升序排序算法',runcount,spend_time_bubble,data) app=QApplication(sys.argv)
form=MainWindow()
form.show()
app.exec_()
插入算法的数量级为n的平方 递归数量级为logn 冒泡排序的数量级为n的平方

【PyQt】算法-插入、递归、冒泡的更多相关文章

  1. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

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

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

  3. 汉诺塔算法的递归与非递归的C以及C++源代码

    汉诺塔(又称河内塔)问题其实是印度的一个古老的传说. 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一 个小, ...

  4. Java写 插入 选择 冒泡 快排

    /** * Created by wushuang on 2014/11/19. */ public class SortTest { @Test public void mainTest() { i ...

  5. 扩展欧几里德算法(递归及非递归实现c++版)

    今天终于弄懂了扩展欧几里德算法,有了自己的理解,觉得很神奇,就想着写一篇博客. 在介绍扩展欧几里德算法之前,我们先来回顾一下欧几里德算法. 欧几里德算法(辗转相除法): 辗转相除法求最大公约数,高中就 ...

  6. Java实现 蓝桥杯VIP 算法提高 递归倒置字符数组

    算法提高 递归倒置字符数组 时间限制:1.0s 内存限制:512.0MB 问题描述 完成一个递归程序,倒置字符数组.并打印实现过程 递归逻辑为: 当字符长度等于1时,直接返回 否则,调换首尾两个字符, ...

  7. python 中的一些基础算法:递归/冒泡/选择/插入

    递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...

  8. Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  9. python学习之路-6 冒泡算法、递归、反射、os/sys模块详解

    算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...

随机推荐

  1. 关于Object.defineProperty的get和set

    面试经常提问vue双向数据绑定的原理,其主要是依赖于Object.definePropety(); Object.definePropety下面有get和set方法. get指读取属性时调用的放法,s ...

  2. HDU 1073 Online Judge(字符串)

    Online Judge Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  3. java基础讲解14-----IO

    package com.io; import java.io.File;import java.io.IOException; public class IoClass {        /**   ...

  4. $("#SpecialAptitude").on("change",function(){CheckType($(this))})$("#SpecialAptitude").on("change",CheckType($(this)))

    $("#SpecialAptitude").on("change",function(){CheckType($(this))})$("#Specia ...

  5. 补习知识:Entity Framework Code First属性映射约定

    Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...

  6. Handler源代码解析-有关Handler那些事

    Handler被成为异步处理大师.相信大家都会用,面试中也常常会问到Handler的底层原理.今天就来看一看Handler的机制. Android的消息处理有四个核心类:Handler.Looper. ...

  7. NoSQL(四)

    mongodb介绍 https://www.yiibai.com/mongodb/mongodb_drop_collection.html 1.文档性数据库类似于json对象,分布式 mongodb安 ...

  8. 监听用户的后退键,解决部分浏览器回退的bug

    监听用户的后退键,解决部分浏览器回退的bug $(document).keydown(function (event) { // 监听backspace键 if (event.keyCode == 8 ...

  9. android studio - 提取局部变量,全局变量,方法快捷键

    提取局部变量:Ctrl+Alt+V 提取全局变量:Ctrl+Alt+F 提取方法:Shit+Alt+M

  10. PHP中的正则表达式及模式匹配

    PHP中的正则表达式及模式匹配 PHP中对于正则处理文本提供了两种方式,一种是PCRE方式(PCRE库是一个实现了与perl 5在语法和语义上略有差异(详见下文)的正则表达式模式匹配功能的函数集. 当 ...