zoukankan      html  css  js  c++  java
  • 测开之路二十四:常见的排序

    冒泡排序

    算法简介:
    1.比较相邻的元素,前一个比后一个大(或者前一个比后一个小)调换位置
    2.每一对相邻的元素进行重复的工作,从开始对一直到结尾对,这步完成后,结尾为做大或最小的数.
    3.针对除了最后一个元素重复进行上面的步骤。
    4.重复1-3步骤直到完成排序

    data = [1,4,3,5,96,0,5,3,864,7]
    for i in range(0,len(data)-1): # i控制需要多少次遍历
    for j in range(0,len(data)-1-i): # j控制前后两个比较的变量
    if data[j] > data[j+1]:
    data[j],data[j+1] = data[j+1],data[j]
    # print(data)
    print(data)

    选择排序

    从第一个到最后一个数一次比较,当前数与后面的所有数比较,最小的放在当前位置。选出最小/最大的数,排在当前位置

     

    def selection(data):
    for i in range(len(data) - 1):
    for j in range(i + 1, len(data)):
    if data[i] > data[j]:
    data[i], data[j] = data[j], data[i]
    return data

    插入排序

    从第二个开始依次取数,和已排好的数据比较,在已排好的数据里找个位置插入。

     

    def insertion(data):
    # i代表待排序的数的索引
    for i in range(1, len(data)):
    # j代表已排好的所有数的索引
    for j in range(0, i):
    if data[i] < data[j]:
    data.insert(j, data.pop(i))
    # print(data)
    return data

    快排

    快排是将数据大小分组,递归处理分组数据进行排序。

    def quick(data):
    #print(data)
    small, middle, big = [], [], []
    if len(data) <= 1:
    return data
    pivot = data[0]
    for i in data:
    if i < pivot:
    small.append(i)
    elif i > pivot:
    big.append(i)
    else:
    middle.append(i)
    less = quick(small)
    more = quick(big)
    return less + middle + more

    归并排序

    def merge(a, b):
    c = []
    h = j = 0
    while j < len(a) and h < len(b):
    if a[j] < b[h]:
    c.append(a[j])
    j += 1
    else:
    c.append(b[h])
    h += 1
    if j == len(a):
    for i in b[h:]:
    c.append(i)
    else:
    for i in a[j:]:
    c.append(i)
    return c
    def merge_sort(lists):
    if len(lists) <= 1:
    return lists
    middle = len(lists)//2
    left = merge_sort(lists[:middle])
    right = merge_sort(lists[middle:])
    return merge(left, right)
  • 相关阅读:
    关于windows线程的各种状态
    《深入理解计算机系统》(第二版)第二章练习题3
    《深入理解计算机系统》(第二版)第二章中的一练习题2
    Linux进程/线程模型
    用户进程中执行的操作系统
    关于操作系统模型
    《深入理解计算机系统》(第二版)第二章中的一题目
    并发问题互斥(Dekker算法和Peterson算法)
    概率问题:星期二出生的孩子
    Yii添加扩展加载Ckeditor 4.0以上版本
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/10810398.html
Copyright © 2011-2022 走看看