python中-----數組中的排序


1.使用內置函數list.sort()

1 class Solution:
2     """
3     @param: A: an integer array
4     @return: 
5     """
6     def sortIntegers(self, A):
7         A.sort()

2.使用sorted() 函數

1 sorted([5, 2, 3, 1, 4])
2 [1, 2, 3, 4, 5]

注:

sorted()與list.sort()的不同

  1)list.sort() 方法返回none,sorted()返回結果

  2)list.sort() 方法只可以供列表使用,而 sorted() 函數可以接受任意可迭代對象(iterable)

1 sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
2 [1, 2, 3, 4, 5]

 

3.插入排序法

 1 def insert_sort(lists):
 2     # 插入排序
 3     count = len(lists)
 4     for i in range(1, count):
 5         key = lists[i]
 6         j = i - 1
 7         while j >= 0:
 8             if lists[j] > key:
 9                 lists[j + 1] = lists[j]
10                 lists[j] = key
11             j -= 1
12     return lists

適用於少量數據的排序,時間復雜度為O(n^2),逐個向前遍歷

 

4.希爾排序

 1 def shell_sort(lists):
 2     # 希爾排序
 3     count = len(lists)
 4     step = 2
 5     group = count / step
 6     while group > 0:
 7         for i in range(0, group):
 8             j = i + group
 9             while j < count:
10                 k = j - group
11                 key = lists[j]
12                 while k >= 0:
13                     if lists[k] > key:
14                         lists[k + group] = lists[k]
15                         lists[k] = key
16                     k -= group
17                 j += group
18         group /= step
19     return lists

首先增量為2,分成len()/2組,兩兩比較

然后減小增量分成len()/2/2組,每組內比較

直到分成一組,排序完成

其中以    插入排序+分組   實現

時間復雜度O(n^1.3)

 

5.冒泡排序

1 def bubble_sort(lists):
2     # 冒泡排序
3     count = len(lists)
4     for i in range(0, count):
5         for j in range(i + 1, count):
6             if lists[i] > lists[j]:
7                 lists[i], lists[j] = lists[j], lists[i]
8     return lists

一次比較兩個元素,時間復雜度O(n)

 

6.快速排序

 1 def quick_sort(lists, left, right):
 2     # 快速排序
 3     if left >= right:
 4         return lists
 5     key = lists[left]
 6     low = left
 7     high = right
 8     while left < right:
 9         while left < right and lists[right] >= key:
10             right -= 1
11         lists[left] = lists[right]
12         while left < right and lists[left] <= key:
13             left += 1
14         lists[right] = lists[left]
15     lists[right] = key
16     quick_sort(lists, low, left - 1)
17     quick_sort(lists, left + 1, high)
18     return lists

low = left;high = right; 將基准數挖出形成第一個坑key。

right --由后向前找比它小的數,找到后挖出此數填前一個坑key中。

left ++由前向后找比它大的數,找到后也挖出此數填到前一個坑key中。

再重復執行2,3二步,直到left=right,將基准數填入a[i]中。

-----------------------------------------------------------------------------------存疑

 

7.直接選擇排序

 1 def select_sort(lists):
 2     # 選擇排序
 3     count = len(lists)
 4     for i in range(0, count):
 5         min = i
 6         for j in range(i + 1, count):
 7             if lists[min] > lists[j]:
 8                 min = j
 9         lists[min], lists[i] = lists[i], lists[min]
10     return lists

先把數列中最小的一個數放在第一個位置,再遍歷第二小的數放在第二個位置,以此類推

 

堆排序,歸並排序,基數排序存疑,以后再看

相關連接:

http://blog.jobbole.com/11745/

視覺直觀感受 7 種常用的排序算法

http://python.jobbole.com/82270/

八大排序算法的python實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM