首页 > 编程语言 > 详细

算法 列表排序

时间:2019-12-24 21:03:42      阅读:108      评论:0      收藏:0      [点我收藏+]

算法

1.什么是算法

一个计算过程,解决问题的方法。

2.时间复杂度

用来评估算法运行效率的

3.空间复杂度

用来评估算法内存占用大小的式子

冒泡排序

1.思路

列表每两个相邻的数,如果前边的比后边的大,那么就交换这两个数的位置。每圈的次数里少排一个。

2.代码实现

#### 冒泡排序  (************************)
### 时间复杂度:O(n^2)
###圈数:元素个数-1 次数:元素个数-1-圈数索引
def Bubble_sort(li): for i in range(len(li)-1): for j in range(len(li)-1-i): if li[j] > li[j+1]: li[j], li[j+1] = li[j+1], li[j]

选择排序

1.思路

技术分享图片

2.代码实现

#### 选择排序
#### 时间复杂度:O(n^2)
def select_sort(li):
    for i in range(len(li)):
        minLoc = i ###i = 0
        for j in range(i+1, len(li)):
            if li[j] < li[minLoc]:
                li[j], li[minLoc] = li[minLoc], li[j]

插入排序

1.思路

技术分享图片

 

 插入到有序区时会与有序区每个元素比较大的方后面位置

2.代码实现

##### 插入排序
#### 时间复杂度: O(n^2)
def insert_sort(li):
    for i in range(1, len(li)):
        tmp = li[i]
        j = i - 1
        while j >=0 and li[j] > tmp:
            li[j+1] = li[j]
            j = j - 1
        li[j+1] = tmp

快速排序

1.思路

取一个元素,从右往左元素依次比较大的放右边不动,小的放左边。哪边空出来位置就从对边取值比较补位。当左边和右边的索引相同时就把取出的元素补上。

2.代码示例

def partition(li, left, right):
    tmp = li[left]
    while left < right:
        # 左边
        while left < right and li[right] >= tmp:
            right = right - 1
        li[left] = li[right]
        # 右边
        while left < right and li[left] <= tmp:
            left = left + 1
        li[right] = li[left]
    # 右边和左边相同时补位
    li[left] = tmp
    return left

#### 快速排序
#### 时间复杂度:O(nlogn)
def quick_sort(li, left, right):
    if left < right:
        mid = partition(li, left, right)
        quick_sort(li, left, mid-1)
        quick_sort(li, mid+1, right)

# 调用
quick_sort(li, 0, len(li)-1)

 

 

 

算法 列表排序

原文:https://www.cnblogs.com/tfzz/p/12093514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!