Python编程之数据结构与算法练习_004

Some排序算法的Python实现。不废话写原理,直接撸代码。

1.Bubble sort 冒泡排序

import random
import copymaxSize = 10000
maxValue = 10000#Generate random data
array=[0]*maxSize
for i in range(maxSize):array[i] = random.randint(10,maxValue)#Correct method
originalArray = copy.deepcopy(array)
testArray = copy.deepcopy(array)
testArray.sort()#Bubble sort
swaped = False
for i in range(maxSize):swaped = Falsefor j in range(0, maxSize - i - 1):if array[j] > array[j+1]:array[j], array[j+1] = array[j+1], array[j]swaped = Trueif not swaped:break
#Compare
for i in range(maxSize):if testArray[i] != array[i]:print("Fucked.")print(originalArray)break
else:print("Success.")

2.Insertion sort 插入排序

#插入排序
import random
import copymaxSize = 10000
maxValue = 10000#Generate random data
array=[0]*maxSize
for i in range(maxSize):array[i] = random.randint(10,maxValue)
#Correct method
testArray = copy.deepcopy(array)
testArray.sort()#Insertion sort
for i in range(1, maxSize):for j in range(i, 0, -1):if array[j] <= array[j-1]:array[j],array[j-1] = array[j-1],array[j]else:break
#Compare
for i in range(maxSize):if testArray[i] != array[i]:print("Fucked.")print("Fucked sample:{}".format(lst))break
else:print("Success.")

3.Quick sort 快速排序

def Partition(lst, left,right):partValue = lst[right]leftIndex = left - 1curIndex = leftrightIndex = rightwhile curIndex < rightIndex:if lst[curIndex] < partValue :leftIndex += 1        lst[curIndex], lst[leftIndex] = lst[leftIndex], lst[curIndex]curIndex += 1elif lst[curIndex] > partValue:rightIndex -= 1lst[curIndex], lst[rightIndex] = lst[rightIndex], lst[curIndex]else:curIndex += 1else:lst[rightIndex], lst[right] = lst[right], lst[rightIndex] #将用来划分的值交换至最终位置return [leftIndex ,rightIndex+1 ]def QuickSort(lst, left, right):if left < right :lstTmp = Partition(lst,left,right)QuickSort(lst, left, lstTmp[0])QuickSort(lst, lstTmp[1], right)# Test
def Compare(lstX, lstY):for i in range(len(lstX)):if lstX[i] != lstY[i]:return Falseelse:return TruemaxRound = 10000
maxValue = 1000
arrLength = 10000
for i in range(maxRound):lst = [random.randint(-maxValue,maxValue) for i in range(arrLength)]
   lstCopy = copy.deepcopy(lst)QuickSort(lst, 0, len(lst)
- 1)correctResult = sorted(lstCopy)if not Compare(correctResult, lst):print("Fucked.")print("Fucked sample:{}".format(lst))break else:print("Success.")

4.Merge sort 归并排序

#归并排序import randomdef merge(lst, left, middle, right):leftIndex = leftrightIndex = middle+1lstHelp = []while leftIndex <= middle and rightIndex <= right:if lst[leftIndex] <= lst[rightIndex]:lstHelp.append(lst[leftIndex])leftIndex += 1else:lstHelp.append(lst[rightIndex])rightIndex += 1while leftIndex <= middle:lstHelp.append(lst[leftIndex])leftIndex += 1while rightIndex <= right:lstHelp.append(lst[rightIndex])rightIndex += 1for i in range(len(lstHelp)):lst[left+i] = lstHelp[i]def MergeSort(lst, left, right):if left == right:returnmiddle = left + ((right - left)>>1)MergeSort(lst, left, middle,)MergeSort(lst, middle+1, right)merge(lst, left, middle, right)# Test
def Compare(lstX, lstY):for i in range(len(lstX)):if lstX[i] != lstY[i]:return Falseelse:return TruemaxRound = 10000
maxValue = 1000
arrLength = 1000
for i in range(maxRound):lst = [random.randint(-maxValue,maxValue) for _ in range(arrLength)]
   lstCopy = copy.deepcopy(lst)MergeSort(lst, 0, len(lst)
- 1)correctResult = sorted(lstCopy)if not Compare(correctResult, lst):print("Fucked.")print("Fucked sample:{}".format(lst))break else:print("Success.")

 

转载于:https://www.cnblogs.com/orcsir/p/8762906.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32串口用中断还是用轮询

1.从轮询到中断很多同学都不喜欢用中断&#xff0c;而偏爱用轮询的操作方式。这是不是和我们的天性有关呢&#xff1f;每个人都喜欢一切尽在掌握中&#xff0c;肯定都不喜欢被打断。我们常常都有这样的经验&#xff1a;正在跟别人说一件事&#xff0c;然后突然有个电话打进来&a…

Castle

Csocket的作用 利用MFC的Csocket类实现网络通信 https://www.cnblogs.com/sva2005/articles/319796.html _tcstod 字符串转 IEEE 双精度浮点数 http://www.cppfans.com/cbknowledge/reference/cstdlib/strtod.asp strtol, _tcstol, wcstol - 字符串转 32 位长整数 (long), 支…

linux 笔记之一mysql源码包安装

linux的MySQL安装 添加mysql组 1 groupadd mysql 将MySQL用户添加到MySQL组中 2 useradd -g mysql mysql 进入MySQL目录 3 cd src/mysql-4.0.27 在安装过程中缺少文件(Linuxthreads)所以将Linuxthreads从定到/usr/include/pthread.h 4 echo /* Linuxthreads */ >> /u…

C++ —— C++高手之路

推荐一些C经典书籍 c程序设计教程 c编程思想 c大学教程 c程序设计语言 数据结构算法与应用c语言描述 c标准模板库------自修教程与参考手册 泛型编程与STL 深度探索c对象模型 设计模式---可复用面向对象软件的基础 重构---改善既有代码的设计 Essential c Effective…

使用Buildroot为I.MX6制作根文件系统

1.引言接触Freescale/NXP的I.MX6处理器大概有了两年多的时间&#xff0c;对于一个最初玩MCU的我来说&#xff0c;真是面临了很多的挑战。最让我感到郁闷和崩溃的是那个官方的基于Yocto的开发环境&#xff0c;搭建它要求真是太高了&#xff0c;机器得有上百G的空间&#xff0c;U…

SQL查询优化《三》:少做重复的工作

1.控制同一语句的多次执行2.减少多次的数据转换3.杜绝不必要的子查询和连接表&#xff0c;子查询在执行计划一般解释成外连接&#xff0c;多余的连接表带来额外的开销。4.合并对同一表同一条件的多次UPDATE&#xff0c;比如 UPDATE EMPLOYEE SET FNAMEHAIWER WHERE EMP_ID VPA3…

C++ —— 初识C++

初识C 一、C概述 1、C语言诞生 &#xff08;1&#xff09;C语言也是诞生于美国贝尔实验室 &#xff08;2&#xff09;C语言是1983年由Bjarne Stroustrup推出的 &#xff08;3&#xff09;C语言是在C语言的基础上推出的 &#xff08;4&#xff09;C语言进一步扩充和完善了C…

扁平的信标灯

▌交流磁场信号会改变地磁计吗&#xff1f;卓大&#xff0c;我想问个问题&#xff0c;智能车比赛的交流信号磁场会对地磁计产生影响吗?▓ 回复&#xff1a; 在今年的智能车竞赛中存在两个交流信号源&#xff1a;&#xff08;1&#xff09;第一种是电磁赛道上的电磁导引线&…

如何选择合适的Web安全网关?

日益加剧的网络威胁让Web安全网关&#xff08;Web Security Gateway&#xff0c;WSG&#xff09;逐渐成为企业边界网络安全防护的新宠。基于OSI模型第七层(应用层)的Web安全网关具有反恶意软件、上网行为管理以及安全审计等诸多安全检测或管控能力。然而面对铺天盖地的广告和琳…

ADS TC3通信

倍福TC3安装方法 WIN7 32 https://wenku.baidu.com/view/7fb11a200a4e767f5acfa1c7aa00b52acec79c62.html [Visual Studio C] [ 倍福 TwinCAT3 ] ADS通讯工程实现 https://blog.csdn.net/Robot_Starscream/article/details/83869264 倍福TwinCAT3上位机与PLC通信测试(ADS通信)…

js字符串转数字(小数),数字转字符串

将字符串转化为小数并加法计算&#xff0c;然后保留两位小数(parseFloat(that.data.pay_price) parseFloat(that.data.qiandao)).toFixed(2)将数字转为字符串并计算长度yuan_price10yuan_price.toString.length //输出2 转载于:https://www.cnblogs.com/shark1100913/p/8782…

C++ —— C++程序编译的四个过程

C —— C程序编译的四个过程 g是Linux下C的编译器&#xff1b;我为什么会选择Linux下的g编译器&#xff0c;就是因为g可以看到程序从编译到运行的过程做了些什么。而VS等集成开发环境看不到这些&#xff0c;并不是说VS工具不好&#xff0c;&#xff08;VS还是相当好用的...&…

屏下指纹介绍

一、光学指纹问题现状光学指纹当前随着成本的下降&#xff0c;各大厂商都在低中高端旗舰用上了光学指纹。有别于传统的电容指纹&#xff0c;光学指纹在解锁性能上目前都进行了优化&#xff0c;性能接近电容指纹。二、光学指纹电容指纹原理两者原理都是对指纹的纹路脊谷进行信号…

关于 SAP 访问关键字的说明

SAP 为了保护标准程序和字典对象&#xff0c;对于标准代码的修改都设定了访问关键字控制&#xff0c;用户需要修改时必须输入正确的访问关键字才可以编辑标准程序和字典对象&#xff0c;这个关键字可以到 SAP 网站上申请。 地址为 http://service.sap.com&#xff0c;用你公司的…

ABAP Netweaver和Hybris里获得内存使用统计数据

ABAP Netweaver 事物码ST06 Hybris 每隔5秒钟&#xff0c;Hybris Administration console会发起一个到Java后台的AJAX查询请求&#xff1a; 这个5秒的时间间隔定义在project.properties配置文件里&#xff0c; 然后使用JavaScript的setInterval建立定期轮询&#xff1a; Java后…

Linux中常用C/C++一些头文件的作用

<assert.h>&#xff1a;ANSI C。提供断言&#xff0c;assert(表达式) <glib.h>&#xff1a;GCC。GTK&#xff0c;GNOME的基础库&#xff0c;提供很多有用的函数&#xff0c;如有数据结构操作函数。使用glib只需要包含<glib.h> <dirent.h>&#xff1a;G…

CRecordset类

CRecordset类 https://blog.csdn.net/elcoteq983/article/details/7000745 CRecordset::Open virtual BOOL Open( UINT nOpenType AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL NULL, DWORD dwOptions none ); nOpenType 接受默认值AFX_DB_USE_DEFAULT_TYPE&#xff0…

STM32做平衡小车,代码,PCB都现成的,妈妈再也不用担心我的毕业设计了

▌一、硬件介绍主控芯片用的是100脚的STM32F103VET6&#xff0c;陀螺仪用的是MPU6050&#xff0c;电机驱动用的是TB6612&#xff0c;蓝牙是汇承的HC05邮票孔封装的&#xff0c;WIFI用的是济南有人科技的USR-WIFI232-S&#xff0c;小车底盘用的是平衡小车之家的某一款带编码器的…

Apache 配置:是否显示文件列表

Apache 配置&#xff1a;是否显示文件列表 进入虚拟主机配置文件 显示文件列表的话 options Indexes FollowSymLinks 不显示文件列表的话 options FollowSymLinks 文章来源&#xff1a;刘俊涛的博客 地址&#xff1a;http://www.cnblogs.com/lovebing 欢迎关注&#xff0c;有问…

升级到virtualbox-2.1.4

今天把virtualbox从1.6.6升级到2.1.4.启动系统时出现VERR_SUPDRV_COMPONENT_NOT_FOUND网上查了一下&#xff0c;桥接需要vboxnetfltmodprobe vboxnetflt后就可以了然后把vboxnetflt加入到/etc/config.d/modules里使每次系统启动都载入vboxnetflt遗憾的是&#xff0c;这次升级并…