数据结构--排序算法

排序算法

排序动画可点击该处
- 快速排序
- 插入排序
- 选择排序
- 冒泡排序
- 归并排序
- 堆排序
- 基数排序
- 希尔排序

1、快速排序(交换)

排序思想:
1、取一个基准数
2、比这个数大的全放到它右边,小于或等于它的数全放到它左边
3、左右区间重复第二步,直到各区间只有一个数

def quik_sort(value, start, stop):  
    if start >= stop:  
        return  

    mid = value[start]  
    low = start  
    hight = stop  
    while low < hight:  
        while low < hight and value[hight] > mid:  
            hight -= 1  
        value[low] = value[hight]  

        while low < hight and value[low] < mid:  
            low += 1  
        value[low] = value[hight]  
    value[low] = mid  

    quik_sort(value, start, low-1)  
    quik_sort(value, hight+1, stop)  

    return value  

print '快排结果:', quik_sort([4, 1, 55, 18, 10], 0, 4) 

2、冒泡排序(交换)

排序思想:
1、比较相邻的元素,如果第一个比第二个大,交换位置,大的元素放在最后。
2、针对所有的元素重复以上的步骤,最后一个除外。
3、持续每次对越来越少的元素重复上面的步骤,直到,没有任何一对数字需要比较。
基本思路:依次比较相邻的两个数

序列:[7,2,3,9]
排序方式:小--
序列长度:4
第一次比较序列索引:0,1,2,3
第二次比较序列索引:0,1,2
第三次比较序列索引:0,1

def bubble_sort(value):  

   # 参数3 step 步长, 默认为1  
    for i in range(len(value) - 1, 0, -1):  
        for y in range(0, i):  
            if value[y] > value[y + 1]:  
                value[y], value[y + 1] = value[y + 1], value[y]
    return value  

result = bubble_sort([10, 1, 3, 4, 2, 5, 8, 100, 20, 25])  
print result  

3、插入排序(插入)

排序思想:
通过构建有序序列,对于未排序的数据,在已排序序列中从后向前进行扫描,找到相应位置并插入。插入排序,在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
基本思路:比较前两个,然后前三个。。。以此类推后边的往前插入到排过的序列。


序列:[7,2,3,9]
排序方式:小--
序列长度:4
第一次比较序列索引:    1,0
第二次比较序列索引:  2,1,0
第三次比较序列索引:3,2,1,0


def insert_sort(value):  

    for x in range(1, len(value)):  
        for y in range(x, 0, -1):  
            if value[y] < value[y-1]:  
                value[y], value[y-1] = value[y-1], value[y]  

    return value  

print insert_sort([4, 2, 6, 1, 9])  

4、希尔排序(插入)

排序思想:

这里写代码片

5、选择排序(选择)

排序思想:
1、从后往前,依次和首位比较,如果小于首位数字,交换两个数字位置
2、从后往前,依次和第二位比较,如果小于第二位数字,交换两个数字位置
3、依次类推,每一轮都是和同一个数比较



序列:[7,2,3,9]
排序方式:小--
序列长度:4
第一次比较序列索引:3,2,1,0
第二次比较序列索引:3,2,1
第三次比较序列索引:3,2

def choosesort(li):  
    for i in range(0,len(li)):  
        for j in range(len(li)-1,i,-1):  
            if li[j] < li[i]:  
                li[j], li[i] = li[i], li[j]  
    return li  
print choosesort([54,26,93,17,77,31,44,55,20])  

6、堆排序(选择)

排序思想:

这里写代码片

7、归并排序

排序思想:

这里写代码片

8、基数排序

排序思想:

这里写代码片
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值