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实现

posted @ 2018-02-01 14:52  <江湖小虾米>  阅读(43668)  评论(0编辑  收藏  举报