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

來源:互聯網
上載者:User

標籤:插入排序   內建函數   1.3   none   ++   turn   快速排序   obb   複雜   

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

1 class Solution:2     """3     @param: A: an integer array4     @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] = key11             j -= 112     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 - group11                 key = lists[j]12                 while k >= 0:13                     if lists[k] > key:14                         lists[k + group] = lists[k]15                         lists[k] = key16                     k -= group17                 j += group18         group /= step19     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 -= 111         lists[left] = lists[right]12         while left < right and lists[left] <= key:13             left += 114         lists[right] = lists[left]15     lists[right] = key16     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實現

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.