码迷,mamicode.com
首页 > 编程语言 > 详细

[数据结构与算法]排序算法(Python)

时间:2015-12-07 15:40:19      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

1、直接插入排序

给定一个数组后,从第二个元素开始,如果比第一个小,就跟他交换位置,否则不动;第三个元素如果比第二个小,把第三个跟第二个交换位置,在把第二个与第一个比较;.....

技术分享
def insert_sort(arr):
    length = len(arr)
    for i in range(1,length):
        if arr[i] < arr[i-1]:
            for j in range(i-1,-1,-1):
                if arr[j+1] < arr[j]:
                    arr[j+1],arr[j] = arr[j],arr[j+1]
    return arr
View Code

时间复杂度:O(n^2).

2、希尔排序法

对数组分成几个段进行排序,拍好了以后还按原来段的下标摆放,例如

技术分享

对第一趟排序下标为1的数来说,就是27跟38比哪个大,哪个就是arr[1],同理arr[0]的值49和13中的较小值

下面是对于每一趟排序的方法

def shell_insert_sort(arr,dk):
    length = len(arr)
    for i in range(dk,len(arr)):
        if arr[i] < arr[i-dk]:
            for j in range(i-dk,-1,-1):
                if arr[j+dk] < arr[j]:
                    arr[j+dk],arr[j] = arr[j],arr[j+dk]

下面是总的方法

技术分享
def shell_sort(arr):
    dk = len(arr) / 2
    while dk >= 1:
        shell_insert_sort(arr,dk)
        dk = dk / 2
View Code

其实单趟方法跟直接插入排序相比就是把1换成了dk

3、简单选择排序

在要排序的一组数中,选出最小(或者最大)的个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后个数)比较为止。

就是循环数组长度,在每一位下找到这一位的下标应该是几,比如循环到1,就是第二位数,这时候如果找到下标是1那就是他自己,否则交换跟这个下标的数交换一下

下面是算出第i个位置数下标应该是多少

技术分享
def select_min_index(arr,i):
    min_index = i
    length = len(arr)
    for j in range(i + 1,length):
        if arr[j] < arr[min_index]:
            min_index = j
    return min_index
View Code

下面是整个方法

技术分享
def select_sort(arr):
    for i in range(0,len(arr)):
        min_index = select_min_index(arr,i)
        if min_index != i:
            arr[i],arr[min_index] = arr[min_index],arr[i]
View Code

简单排序算法的改进--二元选择排序

对于一元的就是对大头小头同时排序

4、冒泡排序

大的沉下去,小的飘上来~

技术分享
def buble(arr):
    for i in range(0,len(arr)):
        for j in range(i+1,len(arr)):
            if arr[i] > arr[j]:
                arr[i],arr[j] = arr[j],arr[i]
    print arr
View Code

5、快速排序法

1)选择一个基准元素,通常选择第一个元素或者最后一个元素,

2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。

3)此时基准元素在其排好序后的正确位置

4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。

 

6、归并排序

7、基数排序

 

[数据结构与算法]排序算法(Python)

标签:

原文地址:http://www.cnblogs.com/tonghounb/p/5026031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!