python算法系列排序与查找_Python 排序与查找算法收集
Python 语言实现几种不同的排序算法,代码来自于老男孩Python全栈开发,学习教程!
import random
import time
import copy
import sys
def cal_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print("%s running time: %s secs." % (func.__name__, t2 - t1))
return result
return wrapper
@cal_time
def bubble_sort(li):
for i in range(len(li) - 1):
for j in range(len(li) - i - 1):
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]
@cal_time
def bubble_sort_1(li):
for i in range(len(li) - 1):
exchange = False
for j in range(len(li) - i - 1):
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]
exchange = True
if not exchange:
break
def select_sort(li):
for i in range(len(li) - 1):
min_loc = i
for j in range(i+1,len(li)):
if li[j] < li[min_loc]:
min_loc = j
li[i], li[min_loc] = li[min_loc], li[i]
def insert_sort(li):
for i in range(1, len(li)):
tmp = li[i]
j = i - 1
while j >= 0 and li[j] > tmp:
li[j+1]=li[j]
j = j - 1
li[j + 1] = tmp
def quick_sort_x(data, left, right):
if left < right:
mid = partition(data, left, right)
quick_sort_x(data, left, mid - 1)
quick_sort_x(data, mid + 1, right)
def partition(data, left, right):
tmp = data[left]
while left < right:
while left < right and data[right] >= tmp:
right -= 1
data[left] = data[right]
while left < right and data[left] <= tmp:
left += 1
data[right] = data[left]
data[left] = tmp
return left
@cal_time
def quick_sort(data):
return quick_sort_x(data, 0, len(data) - 1)
@cal_time
def sys_sort(data):
return data.sort()
def sift(data, low, high):
i = low
j = 2 * i + 1
tmp = data[i]
while j <= high: #只要没到子树的最后
if j < high and data[j] < data[j + 1]:
j += 1
if tmp < data[j]:#如果领导不能干
data[i] = data[j] #小领导上位
i = j
j = 2 * i + 1
else:
break
data[i] = tmp
def heap_sort(data):
n = len(data)
for i in range(n // 2 - 1, -1, -1):
sift(data, i, n - 1)
for i in range(n - 1, -1, -1):
data[0], data[i] = data[i], data[0]
sift(data, 0, i - 1)
sys.setrecursionlimit(100000)
data = list(range(1000, 1, -1))
data.sort()
#random.shuffle(data)
data1 = copy.deepcopy(data)
data2 = copy.deepcopy(data)
data3 = copy.deepcopy(data)
bubble_sort(data1)
quick_sort(data2)
sys_sort(data3)
Python语言实现的几种,不同的查找算法。
import time
import random
def cal_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print("%s running time: %s secs." % (func.__name__, t2 - t1))
return result
return wrapper
@cal_time
def bin_search(data_set, val):
low = 0
high = len(data_set) - 1
while low <= high:
mid = (low+high)//2
if data_set[mid]['id'] == val:
return mid
elif data_set[mid]['id'] < val:
low = mid + 1
else:
high = mid - 1
return
def binary_search(dataset, find_num):
if len(dataset) > 1:
mid = int(len(dataset) / 2)
if dataset[mid] == find_num:
#print("Find it")
return dataset[mid]
elif dataset[mid] > find_num:
return binary_search(dataset[0:mid], find_num)
else:
return binary_search(dataset[mid + 1:], find_num)
else:
if dataset[0] == find_num:
#print("Find it")
return dataset[0]
else:
pass
#print("Cannot find it.")
@cal_time
def binary_search_alex(data_set, val):
return binary_search(data_set, val)
def random_list(n):
result = []
ids = list(range(1001,1001+n))
a1 = ['zhao','qian','sun','li']
a2 = ['li','hao','','']
a3 = ['qiang','guo']
for i in range(n):
age = random.randint(18,60)
id = ids[i]
name = random.choice(a1)+random.choice(a2)+random.choice(a3)
data = list(range(100000000))
print(bin_search(data, 173320))
print(binary_search_alex(data, 173320))
python算法系列排序与查找_Python 排序与查找算法收集相关推荐
- 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序
本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法.编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习). 一句 希尔排序 ...
- 《排序算法系列一、简单选择排序》
2019独角兽企业重金招聘Python工程师标准>>> 一.简单选择排序 描述:给定待排序序列A[ 0......n ] ,选择出第i小元素,并和A[i]交换,这就是一趟简单选择排序 ...
- python 当前时间减一个月_python排序了解一下
排序是每个开发人员都需要掌握的技能.排序是对程序本身有一个全面的理解.不同的排序算法很好地展示了算法设计上如何强烈的影响程序的复杂度.运行速度和效率.今天的文章和谈谈大家都熟悉的各种排序使用 Pyth ...
- 【算法系列 | 2】深入解析排序算法之——插入排序
序言 你只管努力,其他交给时间,时间会证明一切. 文章标记颜色说明: 黄色:重要标题 红色:用来标记结论 绿色:用来标记一级论点 蓝色:用来标记二级论点 决定开一个算法专栏,希望能帮助大家很好的了解算 ...
- python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析
本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...
- python实现冒泡排序算法的非递归版本_python排序算法速度比较:快速排序,归并排序,冒泡排序...
前言 原理就不在这里说了,好多大神肯定比我这个初学者讲的好很多,推荐去B站看视频讲解,跟着手敲代码 为什么选这三个排序呢? 首先快排是必须掌握的 看看快排在最坏的情况下(O(n²)),且不使用辅助空间 ...
- 算法系列—低位优先的字符串排序(基于键索引计数法)
原理日后有空补上.今天该回宿舍了- - 此版本可实现相同长度的字符串数组,不同长度稍加改动即可. C++代码如下: #include<iostream> #include <stri ...
- python找最长的字符串_Python简单实现查找一个字符串中最长不重复子串的方法
本文实例讲述了Python简单实现查找一个字符串中最长不重复子串的方法.分享给大家供大家参考,具体如下: 刚结束的一个笔试题,很简单,不多说简单贴一下具体的实现: #!usr/bin/env pyth ...
- python注入点查找_python注入点查找工具
http://zhan.renren.com/pythonfocus?checked=true #!/usr/bin/python #-*-coding=utf-8-*- #Author:@xfk # ...
最新文章
- Jetty源码学习3-启动服务器
- How to Run a Stress Test in JMeter
- 自定义动画 animate || 案例:王者荣耀手风琴效果分析
- 前端工程化概述||模块化相关规范
- Deep Learning(深度学习)学习笔记整理系列之(四)
- 【好记性不如烂笔头】之小程序要点记录
- android R.id.转化为view
- 交换二叉树的每个节点的左右子树
- Algorithm -- 全排列
- Effective C# Item18:实现标准Dispose模式
- BZOJ3240 NOI2013矩阵游戏(数论)
- dns服务与配置管理,一机多站
- SpringApplication run方法解析:SpringApplicationRunListeners(二)
- 12堂超级搜索术课程笔记链接汇总
- Tomcat后台管理
- python123第四周_百度杯十月第四周WriteUp
- 使用IJ写scala的两种方式
- nexus3仓库搭建
- HM二次开发 - Data Names及其使用
- JAVA微信小程序小说电子书阅读系统毕业设计 开题报告
热门文章
- 多普达与O2之间的关系
- 一道经典推理题(常玩能提高逻辑思维能力哦)
- python修饰器classmate_[python基础]装饰器、迭代器、生成器
- Python TypeError: Classmate() takes no arguments的解决
- iPad mini将如何从重新定义小尺寸平板?
- 推荐一个自动寻找数列规律的网站
- 三星a9html查看器,三星A9解锁教程_三星A9解Crom锁_解锁Bootloader
- 什么是PE? 什么是VC?
- Linux查看实时网速
- 经典SQL学习笔记 (九)-比赛信息数据库练习