排序,是许多编程语言中经常出现的问题。同样的,在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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]