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 排序与查找算法收集相关推荐

  1. 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序

    本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法.编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习). 一句 希尔排序 ...

  2. 《排序算法系列一、简单选择排序》

    2019独角兽企业重金招聘Python工程师标准>>> 一.简单选择排序 描述:给定待排序序列A[ 0......n ] ,选择出第i小元素,并和A[i]交换,这就是一趟简单选择排序 ...

  3. python 当前时间减一个月_python排序了解一下

    排序是每个开发人员都需要掌握的技能.排序是对程序本身有一个全面的理解.不同的排序算法很好地展示了算法设计上如何强烈的影响程序的复杂度.运行速度和效率.今天的文章和谈谈大家都熟悉的各种排序使用 Pyth ...

  4. 【算法系列 | 2】深入解析排序算法之——插入排序

    序言 你只管努力,其他交给时间,时间会证明一切. 文章标记颜色说明: 黄色:重要标题 红色:用来标记结论 绿色:用来标记一级论点 蓝色:用来标记二级论点 决定开一个算法专栏,希望能帮助大家很好的了解算 ...

  5. python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析

    本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...

  6. python实现冒泡排序算法的非递归版本_python排序算法速度比较:快速排序,归并排序,冒泡排序...

    前言 原理就不在这里说了,好多大神肯定比我这个初学者讲的好很多,推荐去B站看视频讲解,跟着手敲代码 为什么选这三个排序呢? 首先快排是必须掌握的 看看快排在最坏的情况下(O(n²)),且不使用辅助空间 ...

  7. 算法系列—低位优先的字符串排序(基于键索引计数法)

    原理日后有空补上.今天该回宿舍了- - 此版本可实现相同长度的字符串数组,不同长度稍加改动即可. C++代码如下: #include<iostream> #include <stri ...

  8. python找最长的字符串_Python简单实现查找一个字符串中最长不重复子串的方法

    本文实例讲述了Python简单实现查找一个字符串中最长不重复子串的方法.分享给大家供大家参考,具体如下: 刚结束的一个笔试题,很简单,不多说简单贴一下具体的实现: #!usr/bin/env pyth ...

  9. python注入点查找_python注入点查找工具

    http://zhan.renren.com/pythonfocus?checked=true #!/usr/bin/python #-*-coding=utf-8-*- #Author:@xfk # ...

最新文章

  1. swift 中拨电话的实现
  2. 4月份阿里云ECS和VPC升级公告
  3. Leetcode 904.水果成蓝(滑动窗口,哈希容器map
  4. ndarray python 映射_191123 使用 Pybind11 和 OpenCV 创建 Python 库
  5. C#编程之委托与事件(一)
  6. (转)实现AI中LOD优化技术
  7. win下php+mysql+apache配置
  8. c语言标准流程图,c语言设计流程图!设计流程图
  9. JDK 安装与环境变量配置(Win10详细版)
  10. 建模实训报告总结_BIM建模实习报告,BIM实训总结1500字
  11. VS code + miktex + 内置pdf阅读器 配置latex编译环境
  12. 全网最详细桥接老式无线路由器教程
  13. linux执行脚本提示文件忙,linux定时执行脚本文件fgo 封号吗
  14. 为什么玩转Power BI一定需要Office 365
  15. 阿里研究员吴翰清:世界需要什么样的智能系统
  16. 如何将u盘里面的两个分区变成为一个分区
  17. 并发编程系列之一:锁的意义
  18. 超越卷积、自注意力:神经网络新算子「内卷(Involution)」
  19. SRS_Audio_Sandbox注册码破解版+注册机+中文
  20. Laravel: artisan的使用

热门文章

  1. 飞翔的小鸟 c++ 2.0版
  2. Linux内核异常分析
  3. MySQL--存储过程、局部变量与用户变量[@](初步认识)
  4. WordPress模板Uigreat1.4设计资源主题
  5. 关于“搭桥”游戏生成随机地图的设计思路
  6. Lua语言中的冒号:和点.
  7. 织梦模板改html教程,dedecms织梦模板介绍及制作修改
  8. SAP FICO 银行对账单导入功能开发说明书(包括开发源代码、测试样例、FS)
  9. .map文件用什么打开_Fusion 360 干货集:盘点那些可以用Fusion 360打开的设计文件...
  10. [系统]制作老毛桃U盘WinPE