【PyQt】插入排序算法
# 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()
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()
algori_Dock_workspace=QWorkspace()
algori_Dock.setWidget(algori_Dock_workspace)
self.clearButton=QPushButton(u'清除输入输出框内容')
self.insert_sort_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.insert_sort_Button,2,0,1,2)
layout2.setRowStretch(3,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) #从输入文本框中获取文本并返回数字列表
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 def showResult(self,pname,runcount,time,data):
tex=pname+u': ||运行时间为:'+str(time)+u' 毫秒 ||运行所用循环执行次数为:'+str(runcount)+u' 次||运行结果为: '+str(data)
self.outTextEdit.setText(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()
self.inTextEdit.clear() app=QApplication(sys.argv)
form=MainWindow()
form.show()
app.exec_()
待添加其他排序算法
【PyQt】插入排序算法的更多相关文章
- 排序系列 之 折半插入排序算法 —— Java实现
基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...
- 排序系列 之 直接插入排序算法 —— Java实现
直接插入排序算法 基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的 ...
- 插入排序---希尔插入排序算法(Javascript版)
取一个小于n的整数作为第一个增量,把序列分组.所有距离为增量的倍数的元素放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量(第二个<第一个)重复上述的分组和排序,直至所取的增量=1, ...
- 插入排序---直接插入排序算法(Javascript版)
将n个元素的数列分为已有序和无序两个部分. 数列:{a1,a2,a3,a4,…,an} 将该数列的第一元素视为有序数列,后面都视为无序数列: {{a1},{a2,a3,a4,…,an}} 将无序数列中 ...
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
插入排序算法主要分为:直接插入算法,折半排序算法(二分插入算法),希尔排序算法,后两种是直接插入算法的改良.因此直接插入算法是基础,这里先进行直接插入算法的分析与编码. 直接插入算法的排序思想:假设有 ...
- PHP实现插入排序算法
插入排序(Insertion Sort),是一种较稳定.简单直观的排序算法.插入排序的工作原理,是通过构建有序序列,对于未排序的数据,在有序序列中从后向前扫描,找到合适的位置并将其插入.插入排序,在最 ...
- 《算法4》2.1 - 插入排序算法(Insertion Sort), Python实现
排序算法列表电梯: 选择排序算法:详见 Selection Sort 插入排序算法(Insertion Sort):非常适用于小数组和部分排序好的数组,是应用比较多的算法.详见本文 插入排序算法的语言 ...
- 直接插入排序算法:ArrayList实现和数组实现
直接插入排序算法思想: 排序区间R[1..n]: 在排序的过程中,整个排序区间被分为两个子区间: 有序区R[ 1 ... i-1 ]和无序区R[ i ... n ]: 共进行n-1趟排序,每趟排序都是 ...
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
随机推荐
- vue - utils.js
exports:导出功能函数或变量 module.exports:默认导出{} ------------------------------------------------------------ ...
- Linux配置快捷方式路径
快就一个字,我只说一次! 1.命令顺序: a) 先输入 cd / b) gedit /etc/profile c) 最后添加路径,看到蓝色部分的没? 把/home更换 ...
- Android中的线程池概述
线程池 Android里面,耗时的网络操作,都会开子线程,在程序里面直接开过多的线程会消耗过多的资源,在众多的开源框架中也总能看到线程池的踪影,所以线程池是必须要会把握的一个知识点; 线程运行机制 开 ...
- eclipse 模版的使用
输入:s,然后利用快捷提示键(alt+/)高速的打出:System.out.println(""); 这样能够节省不少时间,使用了三个按键,却打出了这么多的字.事实上,这个功能是利 ...
- BroadcastReceiver应用详解——广播
转自:http://blog.csdn.net/liuhe688/article/details/6955668 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收 ...
- iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客
亲们, 首先让我们来看一下微信支付的流程吧. 1. 注冊微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些參数. 2. 下载微信支付sdk 3. clien ...
- android与服务端通讯时使用到的GZIP压缩及解压
为了减小android项目与服务端进行通讯时的数据流量,我们可以使用GZIP对服务端传输的数据进行压缩,在android客户端解压.或在客户端压缩,在服务端解压.代码如下: android客户端的GZ ...
- 【VBA编程】03.判断输入年份是否是闰年
通过输入月份,判断是否是闰年 [代码区域] Sub 判断闰年() Dim year As Integer '用于保存输入的年份 year = CInt(InputBox("请输入需要判断的年 ...
- MQTT 学习笔记
MQTT特点 MQTT协议是为大量计算能力有限,且工作在低带宽.不可靠的网络的远程传感器和控制设备通讯而设计的协议. 1.使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合 2.对负载内容 ...
- Lintcode---线段树查询(区间最大值)
对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值. 为SegmentTree设计 ...