网上有很多的排序算法思想、时空复杂的介绍,今天看到了一个算法叫做strand_sort,感觉很新颖,但是看完之后感觉思想很简单,感觉这些排序算法都有某些地方存在着很相同的地方。想着拿来测试一下算法的性能相比于之前的几种排序算法怎么样,但是无奈搜索了很多网上就是没有相关的代码实现,索性就自己写一下吧,中间搞错了一点东西,导致我一直不知道出错在哪里,后来发现错误是我忘记每次循环之后更新base_flag了,为了简单点我初始选取的base_flag是num_list的第一个元素。

strand_sort的思想是:首先建立一个空的数组,这是用来存放最终的结果的,每一次我都取待排序列表中的某个元素作为base_flag也就是基准元素,然后来依次遍历列表,只要比他大(或者小)的元素都装进一个临时建立的列表中,每轮遍历结束后重新置空,然后会有一个合并函数用来合并两个有序列表,直至原始列表元素剩下一个(也即有序)的时候终止循环,可以得到最后的结果了。

好了,不多说了,看代码:

#!/usr/bin/env python
# coding: utf-8''''
功能:使用strand_sort算法来进行排序
'''import random
import mathdef randomnumber_generate(total_num=100, max_num=1000): '''random随机数生成random.random()用于生成一个0到1之间的随机数:0 <= n < 1.0;random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。min(a,b) <= n <= max(a,b);randdom.randint(a, b), 用于生成一个指定范围内的整数,其中a是下限,b是上限: a<= n <= b;random.randrange(start, stop, step), 从指定范围内,按指定基数递增的集合获取一个随机数;random.choice(sequence), 从序列中获取一个随机元素;random.shuffle(x), 用于将一个列表中的元素打乱;random.sample(sequence, k), 从指定序列中随机获取指定长度的片断;'''num_list = []for i in range(total_num):num_list.append(random.randint(0,max_num))return num_listdef merge_list(list1, list2):'''功能:对于输入的两个有序列表,返回合并两个有序列表的结果列表'''tmp = []while len(list1) > 0 and len(list2) > 0:if list1[0] < list2[0]:tmp.append(list1[0])del list1[0]else:tmp.append(list2[0])del list2[0]tmp.extend(list1)tmp.extend(list2)return tmpdef strand_sort(num_list):'''strand_sort排序算法'''result_list = []num_list_len = len(num_list)#print '1111111111111111111', num_list_lenwhile len(num_list) > 1:result_list1=[]flag = num_list[0]result_list1.append(flag)del num_list[0]#print '111111111111111111', len(num_list)for num in num_list:if flag <= num:result_list1.append(num)flag = numnum_index = num_list.index(num)del num_list[num_index]#print result_list1result_list = merge_list(result_list, result_list1)return merge_list(result_list, num_list)if __name__ == '__main__':#num_list=[2,8,5,6,4,1]num_list = randomnumber_generate(total_num=100, max_num=1000)print '---------------------------生成随机排序列表为:-----------------------------------------------------------------'print num_listresult_list_sort = strand_sort(num_list)print '-------------------------------------------strand_sort排序结果为:-----------------------------------------------'print result_list_sort

结果为:

---------------------------生成随机排序列表为:-----------------------------------------------------------------
[999, 760, 473, 526, 83, 625, 514, 220, 431, 950, 34, 206, 436, 302, 635, 629, 455, 893, 461, 581, 223, 655, 593, 688, 798, 922, 466, 527, 718, 330, 241, 230, 487, 366, 594, 389, 461, 677, 143, 660, 660, 946, 176, 989, 292, 30, 319, 308, 323, 99, 96, 743, 890, 300, 577, 954, 206, 209, 495, 663, 179, 155, 260, 446, 186, 955, 78, 375, 19, 220, 972, 618, 151, 907, 627, 759, 380, 339, 348, 24, 98, 825, 698, 111, 374, 621, 720, 536, 635, 953, 483, 53, 369, 483, 303, 976, 316, 210, 75, 636]
-------------------------------------------strand_sort排序结果为:-----------------------------------------------
[19, 24, 30, 34, 53, 75, 78, 83, 96, 98, 99, 111, 143, 151, 155, 176, 179, 186, 206, 206, 209, 210, 220, 220, 223, 230, 241, 260, 292, 300, 302, 303, 308, 316, 319, 323, 330, 339, 348, 366, 369, 374, 375, 380, 389, 431, 436, 446, 455, 461, 461, 466, 473, 483, 483, 487, 495, 514, 526, 527, 536, 577, 581, 593, 594, 618, 621, 625, 627, 629, 635, 635, 636, 655, 660, 660, 663, 677, 688, 698, 718, 720, 743, 759, 760, 798, 825, 890, 893, 907, 922, 946, 950, 953, 954, 955, 972, 976, 989, 999]

python实现strand_sort排序算法相关推荐

  1. 八十八、Python | 十大排序算法系列(下篇)

    @Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  2. 八十七、Python | 十大排序算法系列(上篇)

    @Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  3. python实现常见排序算法

    python实现常见排序算法 快速排序 思想:取出第一个元素把它放到序列的中间某一个正确位置,以它进行分割成左边和右边,再分别对左边和右边进行取元素分割(递归) 递归实现 def quicksort( ...

  4. Python:实现DNF排序算法(附完整源码)

    Python:实现DNF排序算法 # Python program to sort a sequence containing only 0, 1 and 2 in a single pass. re ...

  5. python中用def实现自动排序_用 python 实现各种排序算法

    常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元 ...

  6. python基础===八大排序算法的 Python 实现

    本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...

  7. python实现希尔排序算法_排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)...

    其实本文叫排序算法总结有点过了,只是用python实现了一遍.本文都是参照一篇csdn博客<数据结构排序算法>,里面详细介绍每种排序算法的原理,并给出了C++的实现,再次膜拜. # -*- ...

  8. Python版选择排序算法

    关于Python版冒泡排序算法请参考Python版冒泡法排序算法. def selectSort(lst, reverse=False): length = len(lst) for i in ran ...

  9. 用 python 实现各种排序算法(转)

    常见几种排序的算法: 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成只有一个 ...

  10. python的八大排序算法

    本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...

最新文章

  1. sublime福音:微信小程序组件及API补全插件
  2. android tomtom gps location,TomTom智能地图修正 规避不能走的路
  3. 音视频技术开发周刊 56期
  4. vue --- v-html、v-bind
  5. RuoYi-Cloud 部署篇_03(windows环境 mysql版本)
  6. Icon+启动图尺寸
  7. 用ShopEx网上开店之安装Zend插件[2]
  8. 大学生学图像处理计算机要求,重点大学计算机教材:数字图像处理
  9. 一语点破Java中的静态static关键字
  10. CODEVS-1215迷宫
  11. C++ STL 使用assign对list中的元素进行重置
  12. 单片机编程软件很简单(11),Keil单片机编程软件在线调试
  13. python list转json对象,python 对象和json互相转换方法
  14. 如何写一份风投喜欢的商业计划书?【转载】
  15. IPv6 to IPv4过渡技术——NAT64配置实例
  16. 集尘室行业调研报告 - 市场现状分析与发展前景预测(2021 - 2027)
  17. Python OpenCV --Drowsiness Detector 睡意检测--项目记录
  18. (FortiGate)飞塔防火墙配置端口映射(VIP)
  19. 出圈问题(java)-----n个人围成一圈,数到key或者key的倍数,出圈,问剩下的最后一个人原来的位置是多少?
  20. php毕业设计 基于php+mysql电子书阅读系统毕业设计开题报告功能参考

热门文章

  1. 各种强大的资源搜索引擎及搜索各大网盘资源的方法
  2. python时间处理,datetime中的strftime/strptime
  3. SQL数据查询语句(一)
  4. 20个命令行工具监控 Linux 系统性能
  5. 苹果和FBI出庭日期延后
  6. VMware vSphere 服务器虚拟化之二十七桌面虚拟化之View中使用Thinapp软件虚拟化
  7. 【mysql】mysql常用语句
  8. OC字符串相加,结果按照字符串形式输出
  9. 读写SQL数据库Image字段
  10. 从Bezier到NURBS曲线(1) - Bezier曲线