Python要如何實現(列表)排序?

2022-09-02 20:33:07 字數 3866 閱讀 4858

排序,是許多程式語言中經常出現的問題。同樣的,在python中,如何是實現排序呢?(以下排序都是基於列表來實現)

python中擁有內建函式實現排序,可以直接呼叫它們實現排序功能

python 列表有乙個內建的list.sort()方法可以直接修改列表。還有乙個sorted()內建函式,它會從乙個可迭代物件構建乙個新的排序列表。

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]

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,而不是在原來的基礎上進行的操作。

同其他高階函式一樣,python也可以使用演算法,利用一般語句進行排序。

氣泡排序是最常見到的排序演算法,也是很基礎的一種排序演算法。它的實現思想是:相鄰的兩個元素進行比較,然後把較大的元素放到後面(正向排序),在一輪比較完後最大的元素就放在了最後乙個位置,像魚兒在水中吐的氣泡在上公升的過程中不斷變大,

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

選擇排序的思路是:第一輪的時候,所有的元素都和第乙個元素進行比較,如果比第乙個元素大,就和第乙個元素進行交換,在這輪比較完後,就找到了最小的元素;第二輪的時候所有的元素都和第二個元素進行比較找出第二個位置的元素,以此類推。

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

插入排序的思想是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為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

快速排序的思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小, 然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

def

quick_sort(list, left, right): 

if left >=right:

return

list

key =lists[left]

low =left

high =right

while left while left < right and list[right] >=key:

right -= 1lists[left] =lists[right]

while left < right and list[left] <=key:

left += 1list[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],

def

shell_sort(list):

count =len(list)

step = 2group = count /step

while group >0:

for i in

range(group):

j = i +group

while j 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 列表排序 題目 班級同學的成績存放在列表中,list 523,435,712,566,613,675,620,689,643 請將列表內的成績從小到大進行排序。1 氣泡排序 基本思想 相鄰的兩個元素進行比較,然後把較大的元素放到後面 正向排序 在一輪比較完後最大的元素就放在了最後乙個位...

python實現列表的排序

群裡有同行遇到這樣乙個面試題 有乙個整數構成的列表,需要給這個列表進行從小到大存入到另乙個列表中。本身排序可以用python的內建函式sort和sorted,但題目的要求是手動實現。看起來很簡單,實現的發現並不容易,花了半個小時才除錯好。解題思路 1.將列表中的第1個元素放入新列表,然後將元素的索引...

python 列表排序 python列表排序有哪些

python列表排序 1 氣泡排序,是一種簡單的排序演算法,它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來 2 插入排序,通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。1 氣泡排序 氣泡排序 bubble sort 是一種簡單的排序...