1、冒泡排序

# coding:utf-8# 冒泡排序
# 1. 外层循环负责帮忙递减内存循环的次数【len-1, 1】
# 2. 内层循环负责前后两两比较, index 的取值范围【0, len-2】 len-1-i 次,求最大值放到最后
def bubble_sort(nums):# [1, len-1]for i in range(1, len(nums)-1):# [0, len-1-i]for j in range(len(nums)-i):  # j为列表下标if nums[j] > nums[j+1]:nums[j], nums[j+1] = nums[j+1], nums[j]return numsif __name__ == "__main__":nums = [2, 6, 8, 5, 1, 4, 9, 3, 7]bubble_sort(nums)print('result:', nums)

2、插入排序

# coding:utf8
"""
插入排序和冒泡排序的区别在于:插入排序的前提是:左边是有序的数列
而冒泡排序:相邻的值进行交换,一共进行n次交换
"""
from __future__ import print_functiondef insert_sort(l):# 循环  除第一个数字组成的有序数组 以外的数字for i in range(1, len(l)):# 每一个数字,依次和有序数组进行比较print(l[:i])for j in range(len(l[:i])):if l[i] < l[j]:l[i], l[j] = l[j], l[i]if __name__ == "__main__":l = [5, 1, 9, 3, 2, 7]print(l)insert_sort(l)print("result: " + str(l))

3、归并排序

# coding: utf-8def MergeSort(nums):if len(nums) <= 1:return numsnum = int(len(nums)/2)# 从中间,进行数据的拆分, 递归的返回数据进行迭代排序left = MergeSort(nums[:num])right = MergeSort(nums[num:])print("left: ", left)print("right: ", right)print("-" * 20)return Merge(left, right)def Merge(left, right):l, r = 0, 0result = []while l < len(left) and r < len(right):if left[l] < right[r]:result.append(left[l])l += 1else:result.append(right[r])r += 1result += left[l:]result += right[r:]return resultif __name__ == "__main__":nums = [2, 6, 8, 5, 1, 4, 9, 3, 7]nums = MergeSort(nums)print('result:', nums)

4、快速排序

#!/usr/bin/python
# coding:utf8def quick_sort(nums, start, end):i = startj = end# 结束排序if i >= j:return# 保存首个数值key = nums[i]# 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序while i < j:# 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值<key,那么就交换位置while i < j and key <= nums[j]:print(key, nums[j], '*' * 30)j -= 1nums[i] = nums[j]# 交换位置后,然后在和最左边的值开始比较,如果<=key,然后i+1,慢慢的和后一个值比较;如果值>key,那么就交换位置while i < j and key >= nums[i]:print(key, nums[i], '*' * 30)i += 1nums[j] = nums[i]nums[i] = key# 左边排序quick_sort(nums, start, i-1)# 右边排序quick_sort(nums, i+1, end)if __name__ == "__main__":nums = [2, 6, 8, 5, 1, 4, 9, 3, 7]quick_sort(nums, 0, len(nums) - 1)print('result:', nums)

5、基数排序

#************************基数排序****************************
#确定排序的次数
#排序的顺序跟序列中最大数的位数相关
def radix_sort_nums(L):maxNum = L[0]
#寻找序列中的最大数for x in L:if maxNum < x:maxNum = x
#确定序列中的最大元素的位数times = 0while (maxNum > 0):maxNum = int((maxNum/10))times += 1return times
#找到num从低到高第pos位的数据
def get_num_pos(num, pos):return (int((num/(10**(pos-1))))) % 10
#基数排序
def radix_sort(L):count = 10 * [None]       #存放各个桶的数据统计个数bucket = len(L) * [None]  #暂时存放排序结果
#从低位到高位依次执行循环for pos in range(1, radix_sort_nums(L)+1):#置空各个桶的数据统计for x in range(0, 10):count[x] = 0#统计当前该位(个位,十位,百位....)的元素数目for x in range(0, len(L)):#统计各个桶将要装进去的元素个数j = get_num_pos(int(L[x]), pos)count[j] += 1#count[i]表示第i个桶的右边界索引for x in range(1,10):count[x] += count[x-1]#将数据依次装入桶中for x in range(len(L)-1, -1, -1):#求出元素第K位的数字j = get_num_pos(L[x], pos)#放入对应的桶中,count[j]-1是第j个桶的右边界索引bucket[count[j]-1] = L[x]#对应桶的装入数据索引-1count[j] -= 1# 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表for x in range(0, len(L)):L[x] = bucket[x]

6、选择排序

# coding:utf8
"""
选择排序和冒泡排序的区别在于:选择排序的前提是:找到最大值的位置,最后才进行1次交换
而冒泡排序:相邻的值进行交换,一共进行n次交换
"""
from __future__ import print_functiondef selection_sort(l):length = len(l) - 1while length:index = length# 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!!for j in range(length):if l[j] > l[index]:index = jl[length], l[index] = l[index], l[length]print(len(l) - length, l)length -= 1if __name__ == "__main__":l = [5, 1, 9, 3, 2, 7]print(l)selection_sort(l)print("result: " + str(l))

7、希尔排序

# coding: utf8from __future__ import print_function
def insert_sort(l, start, increment):for i in range(start+increment, len(l), increment):for j in range(start, len(l[:i]), increment):if l[i] < l[j]:l[i], l[j] = l[j], l[i]print(increment, '--',l)return ldef shell_sort(l, increment):# 依次进行分层while increment:# 每一层,都进行n次插入排序for i in range(0, increment):insert_sort(l, i, increment)increment -= 1return lif __name__ == "__main__":l = [5, 2, 9, 8, 1, 10, 3, 4, 7]increment = len(l)/3+1 if len(l)%3 else len(l)/3print("开始", l)l = shell_sort(l, increment)print("结束", l)

排序算法python版本相关推荐

  1. PCA算法(python版本)

    PCA算法 python版本 原理 算法流程 特性 PCA求主方向python代码 法向量python,使用sklearn建树 PCA算法的局限 PCA算法应用: 原理 PCA算法,全程主成分分析法, ...

  2. 2021-03-15 数据挖掘算法—K-Means算法 Python版本

    数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...

  3. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  4. list 排序_十个必知的排序算法|Python实例系列

    十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶排序10.基数排序 完整代码和注释如下 # -*- coding: UTF-8 -*-# ...

  5. shell sort 最后一列排序_十个必知的排序算法|Python实例系列[1]

    实例内容: 十个必知的排序算法具体代码,并简略的得知每种算法对于不同长度数列的排序时间 十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶 ...

  6. 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法

    排序算法python实现 The Selection Sort Algorithm sorts the elements of an array. In this article, we shall ...

  7. 排序算法python实现_合并排序算法– Java,C和Python实现

    排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...

  8. 十大经典排序算法Python版实现(附动图演示)

    来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...

  9. python 按条件选择行和列数据_小白学数据结构-排序算法Python(冒泡、选择、快速、希尔等等)...

    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法,即数据 ...

最新文章

  1. Anaconda中安装Orange3脚本-完整版
  2. 安装cv2(opencv-python)遇到的问题
  3. 拐点已至,云原生引领数字化转型升级
  4. 【推荐】让你事半功倍的交互体验自查清单
  5. sublime text 3 前端开发常用插件
  6. Bokeh——交互式可视化库
  7. Python练习:合格率的计算
  8. opencv之imread()
  9. 御剑后台扫描工具下载、安装、使用教程
  10. 全球DEM下载 90米、30米、12.5米等各种精度DEM数据
  11. 3D人体姿态估计总结
  12. 旋转木马图片效果图,轮播图
  13. vue 页脚_如何将页脚固定在页面底部_sticky footer, Layout, templates, 会员专栏 教程_w3cplus...
  14. Python 3 《Class》入门练习
  15. 扑克迷如何在2019-03-28的市场中利用十字星进行跑赢大盘
  16. matlab高程数据点,matlab 对tif数据高程图的处理分析
  17. Schnorr signature (Schnorr 签名)数学原理
  18. 菲尔兹奖得主丘成桐院士:数学之美与应用
  19. ModelSim 实用知识:优化,SDF,覆盖率
  20. 访问学者申请德国签证如果丢失了怎么办?

热门文章

  1. Centos6.9安装部署nginx服务器
  2. 修复虚拟磁盘LVM表
  3. 转载:简单介绍Python中的try和finally和with方法
  4. **bootstrap常见常用样式总结
  5. 如何关闭eslint检测代码格式报错
  6. like效率 regexp_Oracle 中like效率 正则表达式 浅析
  7. ios 横向滚轮效果_ios横向菜单+页面滑动
  8. linux7 无法连接网络,CentOS7无法连接网络怎么办
  9. matlab 比较日期,[转载][Matlab]关于时间的函数的不完全总结
  10. adb 输入回车命令_adb adb shell 相关命令