# 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】插入排序算法的更多相关文章

  1. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  2. 排序系列 之 直接插入排序算法 —— Java实现

    直接插入排序算法 基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的 ...

  3. 插入排序---希尔插入排序算法(Javascript版)

    取一个小于n的整数作为第一个增量,把序列分组.所有距离为增量的倍数的元素放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量(第二个<第一个)重复上述的分组和排序,直至所取的增量=1, ...

  4. 插入排序---直接插入排序算法(Javascript版)

    将n个元素的数列分为已有序和无序两个部分. 数列:{a1,a2,a3,a4,…,an} 将该数列的第一元素视为有序数列,后面都视为无序数列: {{a1},{a2,a3,a4,…,an}} 将无序数列中 ...

  5. 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)

    插入排序算法主要分为:直接插入算法,折半排序算法(二分插入算法),希尔排序算法,后两种是直接插入算法的改良.因此直接插入算法是基础,这里先进行直接插入算法的分析与编码. 直接插入算法的排序思想:假设有 ...

  6. PHP实现插入排序算法

    插入排序(Insertion Sort),是一种较稳定.简单直观的排序算法.插入排序的工作原理,是通过构建有序序列,对于未排序的数据,在有序序列中从后向前扫描,找到合适的位置并将其插入.插入排序,在最 ...

  7. 《算法4》2.1 - 插入排序算法(Insertion Sort), Python实现

    排序算法列表电梯: 选择排序算法:详见 Selection Sort 插入排序算法(Insertion Sort):非常适用于小数组和部分排序好的数组,是应用比较多的算法.详见本文 插入排序算法的语言 ...

  8. 直接插入排序算法:ArrayList实现和数组实现

    直接插入排序算法思想: 排序区间R[1..n]: 在排序的过程中,整个排序区间被分为两个子区间: 有序区R[ 1 ... i-1 ]和无序区R[ i ... n ]: 共进行n-1趟排序,每趟排序都是 ...

  9. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

随机推荐

  1. django2自动发现项目中的url

    根据路飞学城luffycity.com 的crm项目修改的 1 url入口:rbac/urls.py urlpatterns = [ ... # 批量操作权限 re_path(r'^multi/per ...

  2. 说说iDempiere = OSGi + ADempiere的OSGi

    怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ 我对iDempiere还完全摸不着头脑,正好在学习之际,应erp100的@纵横四海 邀请 ...

  3. tar排除指定目录打包

    转载自:http://hxl2009.blog.51cto.com/779549/476513 假设 test目录下有 1 2 3 4 5 这5个目录现在要将 3 4 5目录tar打包,1和2目录不要 ...

  4. SSH登陆响应慢的问题

    http://xiaobin.net/201112/ssh-login-quite-slow/ 同样的问题,有可能是两种情况: 第一种情况比较常见,也有很多资料提及到,就是在SSH登陆时服务器端会对客 ...

  5. HTML5学习笔记3 内联SVG

    HTML5支持内联SVG 下面来介绍一下什么是SVG SVG可缩放矢量图形 可缩放矢量是基于可扩展标记语言(标准通用语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准 ...

  6. Linux下Tomcat 8080 端口被占用的解决办法

    希望可以帮助你们 一,停止tomcat 并执行#netstat -an|grep 8080   查看发现有许多80端口进程在里面 二,执行# lsof -i :8080|grep -v "P ...

  7. JS正则表达式(转载)

    在JavaScript中,RegExp对象表示正则表达式,用来对字符串进行匹配. 一.两种定义方法: 1.直接量法: /pattern/attribute 2.对象法: new RegExp(patt ...

  8. Navicat for MySQL再谈之无奈之下还是去安装Navicat Premium

    不多说,直接上干货! 首先,Navicat for MySQL没有查看数据库属性. 其次,没有这个功能多和强大,在走过一段弯路之后,果断放弃Navicat for MySQL,而使用Navicat P ...

  9. 转 OAuth 2.0授权协议详解

    http://www.jb51.net/article/54948.htm 作者:阮一峰 字体:[增加 减小] 类型:转载 时间:2014-09-10我要评论 这篇文章主要介绍了OAuth 2.0授权 ...

  10. ubuntu彻底干净卸载MySQL、Apache2、Php的方法(各版本通用

    一.卸载删除 mysql   1 sudo apt-get autoremove --purge mysql-server-5.0 2 sudo apt-get remove mysql-server ...