排序,是许多编程语言中经常出现的问题。同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现)

一、使用Python内置函数进行排序

Python中拥有内置函数实现排序,可以直接调用它们实现排序功能

Python 列表有一个内置的 list.sort() 方法可以直接修改列表。还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表。

1.sort()函数:


list.sort(cmp=None, key=None, reverse=False)

其中参数的含义是:

cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。

默认输入列表就可以排序,例如:


list=[1,2,4,5,3]
list.sort()
print(list)
>>>[1,2,3,4,5]

2.sorted()函数:


sorted(iterable, cmp=None, key=None, reverse=False)

其中:

iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

同样的,使用sorted()函数可以对列表进行排序,例如:


list=[1,2,4,5,3]
print(sorted(list))
>>>[1,2,3,4,5]

sort()和sorted()虽然相似,都可以实现排序功能,但是它们有很大的不同:

sort ()与sorted()区别:

sort() 是应用在 list 上的方法,sorted() 可以对所有可迭代的对象进行排序操作。

list 的 sort() 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted() 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

列表的翻转(reverse)、升序(sort)、降序(sorted),按长度排列的用法 


list4 = [10,10,50,20,30,60,51,20,10,10]
print(list4)
list4.reverse()               #翻转
print(list4)
list4.sort()
print(list4)            #升序排列,直接对表进行操作
list4.sort(reverse=True)
print(list4)            #降序排列
list41 = [10,10,50,20,30,60,51,20,10,10]
print(sorted(list41))        #升序排列,生成一个新表
print(list41)
print(sorted(list41,reverse=True)) #降序排列,从之前的列表中挑选出元素组成新的表
print(list41)
list43 = ["fddg","gfdggfg","f"]  #按照长度进行排序,生成新的列表
print(sorted(list43,key=len))

二、使用常用的排序算法进行排序

同其他高级函数一样,Python也可以使用算法,利用一般语句进行排序。

1.冒泡排序

  冒泡排序是最常见到的排序算法,也是很基础的一种排序算法。它的实现思想是:相邻的两个元素进行比较,然后把较大的元素放到后面(正向排序),在一轮比较完后最大的元素就放在了最后一个位置,像鱼儿在水中吐的气泡在上升的过程中不断变大,


def bubble_sort(list):
count = len(list)
for i in range(count):
for j in range(i + 1, count):
if list[i] > list[j]:
list[i], list[j] = list[j], list[i]
return list

2.选择排序

  选择排序的思路是:第一轮的时候,所有的元素都和第一个元素进行比较,如果比第一个元素大,就和第一个元素进行交换,在这轮比较完后,就找到了最小的元素;第二轮的时候所有的元素都和第二个元素进行比较找出第二个位置的元素,以此类推。


def selection_sort(list):
length = len(list)
for i in range(length - 1, 0, -1):
for j in range(i):
if list[j] > list[i]:
list[j], list[i] = list[i], list[j]
return list

3.插入排序

  插入排序的思想是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。 是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置), 而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中


def insert_sort(list):
count = len(list)
for i in range(1, count):
key = list[i]
j = i - 1
while j >= 0:
if list[j] > key:
list[j + 1] = list[j]
list[j] = key
j -= 1
return list

4.快速排序

  快速排序的思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。


def quick_sort(list, left, right): 
if left >= right:
return list
key = lists[left]
low = left
high = right
while left < right:
while left < right and list[right] >= key:
right -= 1
lists[left] = lists[right]
while left < right and list[left] <= key:
left += 1
list[right] = list[left]
list[right] = key
quick_sort(list, low, left - 1)
quick_sort(list, left + 1, high)
return list
lst1 = raw_input().split()  #调用函数
lst = [int(i) for i in lst1]
#lst = input()
quick_sort(lst,0,len(lst)-1)
for i in range(len(lst)):
print lst[i],

5.希尔排序

  希尔排序是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少, 每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。


def shell_sort(list):
count = len(list)
step = 2
group = count / step
while group > 0:
for i in range(group):
j = i + group
while j < count:
k = j - group
key = list[j]
while k >= 0:
if list[k] > key:
list[k + group] = list[k]
list[k] = key
k -= group
j += group
group /= step
return list

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • Python 列表排序详解
  • Python入门基本操作列表排序用法详解
  • Python列表排序方法reverse、sort、sorted详解
  • Python列表排序 list.sort方法和内置函数sorted用法
  • python实现列表的排序方法分享
  • Python实现的列表排序、反转操作示例
  • python列表排序用 sort()和sorted()的区别

Python要如何实现列表排序的几种方法相关推荐

  1. python如何完成列表的排序_Python要如何实现列表排序的几种方法

    排序,是许多编程语言中经常出现的问题.同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现) 一.使用Python内置函数进行排序 Python中拥有内置函数实现排序,可以直接调用 ...

  2. python list列表排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  3. 【Python 教程】list 列表遍历的 4 种方法

    第一种:使用 for 循环遍历 list = ["01", "02", "03", "04"]for num in li ...

  4. Python对IP地址列表排序、对列表进行去重、IP地址与MAC地址组合的多个元组的列表排序

    1.python对IP地址列表排序 # -*- coding: utf-8 -*-import socket listIP = ['10.5.11.1', '192.168.1.33', '10.5. ...

  5. Python对IP地址列表排序、对列表进行去重、IP地址与MAC地址组合的多个元组的列表排序,对列表内的元组升序和降序排序

    1.python对IP地址列表排序 # -*- coding: utf-8 -*-import socket listIP = ['10.5.11.1', '192.168.1.33', '10.5. ...

  6. python列表的排序方法_pythonlist排序的两种方法及实例

    本文主要介绍了python list排序的两种方法及实例讲解.具有很好的参考价值,下面一起来看下吧 对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排 ...

  7. 《 Python List 列表全实例详解系列(九)》__列表反转(6种方法)

    < Python List 列表全实例详解系列(九)> __列表反转(6种方法) 本章目录: 十一.列表反转的6种方法 (11.1).通过列表的切片操作实现列表反转 (11.2).使用列表 ...

  8. Python对列表去重的4种方法

    Python对列表去重的4种方法 列表 去重 开发中对数组.列表去重是非常常见的需求,对一个list中的id进行去重,有下面几种方法,前面两种方法不能保证顺序, 后面两种方法可以保持原来的顺序. 下面 ...

  9. python如何删除代码_Python列表删除的三种方法代码分享

    1.使用del语句删除元素 >>> i1 = ["a",'b','c','d'] >>> del i1[0] >>> prin ...

最新文章

  1. 小波矩特征提取matlab代码
  2. ElasticSearch 在数十亿级别数据下,如何提高查询效率?
  3. 机器学习算法-PCA降维技术
  4. slidingmenu阻碍沉浸式实现的原理讲解,demo下载地址在github
  5. java jar包 平滑重启,nginx 平滑重启的实现方法
  6. kali NETCAT NC的使用
  7. 【2019牛客暑期多校训练营(第二场)- F】Partition problem(dfs,均摊时间优化)
  8. C++:类对象的复制和赋值
  9. CVPR 2019 IIAI 目标计数
  10. 线程池很难么?带你从头到尾捋一遍,不信你听不懂!
  11. Vrep基础部分(二)
  12. Windows Server 2008 R2终端服务器激活方法
  13. linux 软防火墙 DDOS,Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战
  14. 计算机网卡大小怎么查看,查看电脑网卡是100M还是1000M的方法
  15. 李开复:如何设计你的年度计划
  16. 拳头产品|海泰虎讯,新一代安全即时通讯系统
  17. AUBO E系列教育科研型机器人QA--持续更新中
  18. 手绘标记视频标题文字介绍ae模板
  19. 35岁的程序员:第24章,兼职项目
  20. 韵达快递单号可以批量查询吗

热门文章

  1. 《Java技术及应用》课程标准
  2. 防止ACCESS数据库被下载
  3. 想进游戏公司工作,哪个岗位好就业
  4. Uni-app从入门到实战3天训练营 (二)
  5. python字符串函数reversed_Python reversed()函数
  6. 博大考神职称计算机软件破解版,博大考神职称计算机考试
  7. 【python爬虫】全国大学生创业服务网项目按高校分类查询
  8. python kazoo 踩坑记录
  9. 上海宝付HR揭秘程序员面试门槛高背后的潜规则
  10. 智能网联汽车硬件设备相关资料(取证用)