Python-数据结构-最全六种排序代码实现
1.冒泡排序
def bubble_sort(alist):
"""冒泡排序"""
n = len(alist)
for j in range(n - 1):
"""j=0,1,2,n-2"""
count = 0
"""内层循环控制从头到尾的遍历"""
for i in range(0, n - 1 - j):
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if 0 == count:
break
1.1冒泡排序的测试
if __name__ == '__main__':
li = [54, 26, 77, 17, 77, 31, 44, 55, 20]
print(li)
bubble_sort(li)
print(li)
2.选择排序
def selection_sort(alist):
n = len(alist)
""" 需要进⾏n-1次选择操作"""
for i in range(n - 1):
"""记录最⼩位置"""
min_index = i
"""从i+1位置到末尾选择出最⼩数据"""
for j in range(i + 1, n):
if alist[j] < alist[min_index]:
min_index = j
# 如果选择出的数据不在正确位置,进⾏交换
if min_index != i:
alist[i], alist[min_index] = alist[min_index], alist[i]
2.2选择排序的测试
alist = [54, 226, 93, 17, 77, 31, 44, 55, 20]
selection_sort(alist)
print(alist)
3.插入排序
def insert_sort(alist):
n = len(alist)
for j in range(1, n):
for i in range(j, 0, -1):
if alist[i] < alist[i - 1]:
alist[i], alist[i - 1] = alist[i - 1], alist[i]
else:
break
print(alist)
3.3插入排序的测试
if __name__ == '__main__':
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(li)
insert_sort(li)
4.快速排序
def quick_sort(alist, start, end):
if start >= end:
return
mid = alist[start]
left = start
right = end
"""left与right未重合,就向中间移动"""
while left < right:
while left < right and alist[right] >= mid:
right -= 1
alist[left] = alist[right]
while left < right and alist[left] <= mid:
left += 1
alist[right] = alist[left]
"""循环退出来后,left与right相遇,即left=right"""
alist[left] = mid
print(alist)
quick_sort(alist, start, left - 1)
quick_sort(alist, left + 1, end)
4.4快速排序测试
if __name__ == '__main__':
li = [54, 26, 93, 1, 7, 31, 44, 55, 20]
quick_sort(li, 0, len(li) - 1)
# print(li)
5.希尔排序
def shell_sort(alist):
n = len(alist)
gap = n // 2 # 4
while gap >= 1:
"j是从间隔gap到序列末尾的值"
for j in range(gap, n): # j=4 ,5,6,7,8
i = j # i=4 ,5,6,7,8
while (i - gap) >= 0: # i-gap=4-4,5-4,6-4,7-4,8-4
if alist[i] < alist[i - gap]: # 下标为i的和下标为i-gap的比较(alist[4]<alist[0])
alist[i], alist[i - gap] = alist[i - gap], alist[i] # 如果小于交换位置
else:
break # 如果大于,不交换位置
gap = gap // 2 # 减小间隔
5.5希尔排序测试
if __name__ == '__main__':
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(li)
shell_sort(li)
print(li)
6.归并排序
def merge_sort(alist):
"""归并排序"""
n = len(alist)
if 1 == n:
return alist
mid = n // 2
"""对左半部分进行归并排序"""
left_sorted_li = merge_sort(alist[:mid])
"""对右半部分进行归并排序"""
right_sorted_li = merge_sort(alist[mid:])
"""合并两个有序集合"""
left, right = 0, 0 # 设定两个游标,让其初始值为0
merge_sortted_li = [] # 设定一个空列边用于添加合并元素
left_n = len(left_sorted_li)
right_n = len(right_sorted_li)
while left < left_n and right < right_n:
if left_sorted_li[left] <= right_sorted_li[right]:
merge_sortted_li.append(left_sorted_li[left])
left += 1
else:
merge_sortted_li.append(right_sorted_li[right])
right += 1
merge_sortted_li += left_sorted_li[left:]
merge_sortted_li += right_sorted_li[right:]
return merge_sortted_li
6.6归并排序测试
if __name__ == '__main__':
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print("before sort: %s" % alist)
sorted_alist = merge_sort(alist)
print("after sort: %s" % alist)
print("sorted new list: %s" % sorted_alist)
Python-数据结构-最全六种排序代码实现的更多相关文章
- python 数据结构与算法之排序(冒泡,选择,插入)
目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...
- python数据结构-最全的六种排序
1.冒泡排序: 比较相邻的元素,如果第一个比第二个大,那就交换位置 让大的元素跟下一个相邻的元素作比较,如果大于交换位置 对所有元素重复以上步骤(除了最后一个),直到没有任何一个需要作对比 2.选择排 ...
- python数据结构与算法——桶排序
桶排序的时间复杂度是O(M+N),通过建立对原始数据的有序统计表,实现非常快速的排序过程 可以用hashtable(或者dict)实现,查询复杂度为O(1) 贴代码: # 简单桶排序 从小到大 def ...
- Python 数据结构与算法——桶排序
#简单的桶排序 def bucksort(A): bucks = dict() # 定义一个桶变量,类型为字典 for i in A: bucks.setdefault(i,[]) # 每个桶默认为空 ...
- Python数据结构与算法(排序)
https://www.cnblogs.com/fwl8888/p/9315730.html
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- 数据结构 - 只需选择排序(simple selection sort) 详细说明 和 代码(C++)
数据结构 - 只需选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601 ...
- 基于python的七种经典排序算法
参考书目:<大话数据结构> 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
随机推荐
- Java实现 LeetCode 332 重新安排行程
332. 重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序.所有这些机票都属于一个从JFK(肯尼迪国际机场 ...
- Java实现 LeetCode 14 最长公共前缀
14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower",&quo ...
- Java实现LeetCode_0028_ImplementStrStr
package javaLeetCode.primary; import java.util.Scanner; public class ImplementStrStr_28 { public sta ...
- Java实现 洛谷 P1149 火柴棒等式
import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.S ...
- java实现第六届蓝桥杯垒骰子
垒骰子 题目描述 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰 ...
- 05.Django-form表单与请求的生命周期
Django中请求的生命周期 HTTP请求及服务端响应中传输的所有数据都是字符串 步骤 用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务器 url经过wsgi和中间件,到达路由映射表,在 ...
- tensorflow2.0学习笔记第一章第四节
1.4神经网络实现鸢尾花分类 import tensorflow as tf from sklearn import datasets import pandas as pd import numpy ...
- ElasticSearch系列(二):ElasticSearch Head、Kibana、Elasticsearch-Analysis-Ik安装、使用
1.ElasticSearch Head使用 扩展程序安装插件:ElasticSearch github地址:https://github.com/mobz/elasticsearch-head/ 运 ...
- linux中c多线程同步方法
https://blog.csdn.net/jkx01whg/article/details/78119189 Linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. 一.互斥 ...
- Markdown 主题修改
加粗字体的颜色修改 strong, b{ color: #111111; } 斜体的颜色修改 em, i { color: #111111; } 高亮字体的背景颜色修改 #write mark { b ...