前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法与查找算法

排序算法与查找算法

作者头像
马一特
发布2020-09-08 11:06:34
4860
发布2020-09-08 11:06:34
举报
文章被收录于专栏:马一特马一特

排序算法

冒泡排序

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 健壮性:健壮
  • 难易程度:简单
代码语言:javascript
复制
def bubbleSort(li):
    for i in range(len(li) - 1):
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]

li = [345, 456, 68.435, 1, 6, 4, 568, ]
bubbleSort(li)
print(li)

选择排序

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 健壮性:健壮
  • 难易程度:简单
代码语言:javascript
复制
def selectSort(li):
    for i in range(len(li) - 1):
        min = I  # 选择一个小的来比较
        for j in range(i + 1, len(li)):
           if li[min] > li[j]:
               li[min], li[j] = li[j], li[min]

li = [345, 456, 68.435, 1, 6, 4, 568, ]
selectSort(li)
print(li)

插入排序

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 健壮性:健壮
  • 难易程度:较复杂
代码语言:javascript
复制
def insertSort(li):
    for i in range(len(li) - 1):
        temp = li[i]
        j = i - 1
        while j >= 0 and li[j] > temp:
            li[j + 1] = li[j]
            j = j - 1
        li[j + 1] = temp


li = [345, 456, 68.435, 1, 6, 4, 568, ]
insertSort(li)
print(li)

快速排序

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(nlogn)
  • 健壮性:不稳定
  • 难易程度:复杂
代码语言:javascript
复制
# 二分左右
def partition(list_for_partition, left, right):
    # 中轴点
    pivot = list_for_partition[left]

    while left < right:
        while left < right and list_for_partition[right] >= pivot:
            right -= 1
        list_for_partition[left] = list_for_partition[right]
        while left < right and list_for_partition[left] <= pivot:
            left += 1
        list_for_partition[right] = list_for_partition[left]

    list_for_partition[left] = pivot
    return left


# 快速排序
def sort_quickly(list_for_partition, left, right):
    if left < right:
        pivot = partition(list_for_partition, left, right)

        sort_quickly(list_for_partition, left, pivot - 1)
        sort_quickly(list_for_partition, pivot + 1, right)
    return list_for_partition


# 输出结果
def output_sort_result(list_for_partition):
    return sort_quickly(list_for_partition, 0, len(list_for_partition) - 1)

堆排序

  • 时间复杂度:O(nlog₂n)
  • 空间复杂度:O(1)
  • 健壮性:不稳定
  • 难易程度: 困难
代码语言:javascript
复制
def heap_sort(array):
    def heap_adjust(parent):
        child = 2 * parent + 1  # left child
        while child < len(heap):
            if child + 1 < len(heap):
                if heap[child + 1] > heap[child]:
                    child += 1  # right child
            if heap[parent] >= heap[child]:
                break
            heap[parent], heap[child] = \
                heap[child], heap[parent]
            parent, child = child, 2 * child + 1

    heap, array = array.copy(), []
    for i in range(len(heap) // 2, -1, -1):
        heap_adjust(i)
    while len(heap) != 0:
        heap[0], heap[-1] = heap[-1], heap[0]
        array.insert(0, heap.pop())
        heap_adjust(0)
    return array

查找算法

顺序查找

二分查找

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 排序算法
  • 查找算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档