美文网首页python/go刷题篇
python/go常规排序算法一览

python/go常规排序算法一览

作者: 超鸽带你飞 | 来源:发表于2021-09-28 19:43 被阅读0次
# 直接排序
def sort(list):
    n = len(list)
    for i in range(n-1):
        for j in range(i+1,n):
            if list[i]>list[j]:
                list[i],list[j] = list[j],list[i]
    return list

# 冒泡
def bubbleSort(list):
    n = len(list)
    for i in range(n-1):            # 该层循环控制 需要冒泡的轮数
        for j in range(n-1,i,-1):   # 每次循环比较相邻两个数,按大小交换
            if list[j-1] >list[j]:
                list[j-1],list[j] = list[j],list[j-1]
    return list

//冒泡 go
func bubble(list []int) []int {
    n := len(list)
    for i := 0; i < n; i++ {
        for j := n - 1; j > i; j-- {
            if list[j-1] > list[j] {
                list[j-1], list[j] = list[j], list[j-1]
            }
        }
    }
    return list
}

# 选择排序
def selectSort(list):
    n = len(list)
    for i in range(n-1):
        min = i
        # 每一趟选出一个最小值,放到前面
        for j in range(i+1,n):
            if list[j] < list[min]:
                min = j
        list[min],list[i] = list[i],list[min]
    return list

# 插入排序
def insertSort(list):
    n = len(list)
    for i in  range(1,n):
        min = list[i]
        # 不断地从后面选一个数,然后插入到前面已经有序的序列里
        for j in range(i-1,-1,-1):
            if list[j] > min:
                list[j+1],list[j] =list[j],list[j+1]
            else:
                break
    return list

# 快排
def quickSort(list):
    # 先判断是否需要继续进行
    n = len(list)
    if n <= 1:
        return list
    # 选择第一个元素作为基准
    base = list[0]
    # 遍历除了基准外的所有元素,按照大小关系放入两个数组内
    left = []
    right = []
    for i in range(1, n):
        if base > list[i]:
            left.append(list[i])
        else:
            right.append(list[i])
    # 分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
    # 合并
    return quickSort(left)+[base]+quickSort(right)

//快排 go
func quick(list []int) []int {
    n := len(list)
    if n <= 1 {
        return list
    }
    base := list[0]
    left := []int{}
    right := []int{}
    for i := 1; i < n; i++ {
        if list[i] < base {
            left = append(left, list[i])
        } else {
            right = append(right, list[i])
        }
    }
    return append(append(quick(left), base), quick(right)...)
}

# 归并
def mergeSort(list):
    # 先判断是否需要继续进行
    n = len(list)
    if n <= 1:
        return list
    mid = n//2  # 向下取整
    # 拆分到单个元素,然后两个两个往上进行递归合并。
    left = mergeSort(list[:mid])
    right = mergeSort(list[mid:])

    # 设置left 和right两个游标, 进行合并
    left_point, right_point = 0, 0
    result = []
    while True:
        if left_point == len(left):
                result+=right[right_point:]
                break
        if right_point == len(right):
                result+=left[left_point:]
                break

        if left[left_point] < right[right_point]:
            result.append(left[left_point])
            left_point+=1
        else:
            result.append(right[right_point])
            right_point+=1
    return result

//归并 go
func merge(list []int) []int {
    n := len(list)
    if n <= 1 {
        return list
    }
    mid := n / 2
    l1 := merge(list[:mid])
    l2 := merge(list[mid:])
    p1, p2 := 0, 0
    l := []int{}
    for {
        if p1 == len(l1) {
            l = append(l, l2[p2:]...)
            break
        }
        if p2 == len(l2) {
            l = append(l, l1[p1:]...)
            break
        }

        if l1[p1] < l2[p2] {
            l = append(l, l1[p1])
            p1++
        } else {
            l = append(l, l2[p2])
            p2++
        }
    }
    return l
}

nums = [6,8,4,7,2,1]
# print(sort(nums))
# print(bubbleSort(nums))
# print(quickSort(nums))
# print(selectSort(nums))
# print(insertSort(nums))
# print(mergeSort(nums))

相关文章

  • python/go常规排序算法一览

  • 数据结构01-常规排序算法

    第一章 常规排序算法 第一章 常规排序算法一、排序的基本概念排序内部排序与外部排序排序的稳定性二、冒泡排序算法思想...

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • Golang快速排序(分治-填充)

    go快速排序算法,Go没有while循环,使用for 测试

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 排序优化

    一、如何选择合适的排序算法? 1.排序算法一览表时间复杂度 是稳定排序? 是原地排序?冒泡排序 O(n^2) 是 ...

  • go排序之路(编程基础)

    对python排序有兴趣的可以去我之前的博客查找TopGun Python排序 冒泡排序 pupu.go(思路 每...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • 排序算法最强总结及其代码实现(Python/Java)

    前言 本文总结了常用的全部排序算法,内容包括: 排序算法的定义和思路 排序算法的代码实现:Python和Java,...

  • Sort Array

    终于刷完了 5 种最常见的排序算法 , 后续尝试优化 , 并且还有其他高级排序算法的尝试 快速排序 复盘 go...

网友评论

    本文标题:python/go常规排序算法一览

    本文链接:https://www.haomeiwen.com/subject/papudltx.html