Python要如何实现列表排序的⼏种⽅法
排序,是许多编程语⾔中经常出现的问题。同样的,在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)
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.插⼊排序
快速排序python实现
  插⼊排序的思想是将⼀个数据插⼊到已经排好序的有序数据中,从⽽得到⼀个新的、个数加⼀的有序数据,算法适⽤于少量数据的排序,时间复杂度为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
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。