首页 > 其他分享 >二进制插入排序

二进制插入排序

时间:2024-02-01 14:01:29浏览次数:33  
标签:sort binary 二进制 插入排序 collection insertion sorted True

"""
要运行文档测试,请执行以下命令:
python -m doctest -v binary_insertion_sort.py
或
python3 -m doctest -v binary_insertion_sort.py

要进行手动测试,请运行:
python binary_insertion_sort.py
"""

def binary_insertion_sort(collection: list) -> list:
    """
    使用二分插入排序算法对列表进行排序。

    :param collection: 包含可比较项的可变有序集合。
    :return: 相同的集合按升序排列。

    示例:
    >>> binary_insertion_sort([0, 4, 1234, 4, 1])
    [0, 1, 4, 4, 1234]
    >>> binary_insertion_sort([]) == sorted([])
    True
    >>> binary_insertion_sort([-1, -2, -3]) == sorted([-1, -2, -3])
    True
    >>> lst = ['d', 'a', 'b', 'e', 'c']
    >>> binary_insertion_sort(lst) == sorted(lst)
    True
    >>> import random
    >>> collection = random.sample(range(-50, 50), 100)
    >>> binary_insertion_sort(collection) == sorted(collection)
    True
    >>> import string
    >>> collection = random.choices(string.ascii_letters + string.digits, k=100)
    >>> binary_insertion_sort(collection) == sorted(collection)
    True
    """

    # 获取集合的长度
    n = len(collection)
    
    # 遍历集合,从索引1开始
    for i in range(1, n):
        # 获取要插入的值
        value_to_insert = collection[i]
        
        # 初始化二分查找的起始和结束位置
        low = 0
        high = i - 1

        # 二分查找
        while low <= high:
            mid = (low + high) // 2
            if value_to_insert < collection[mid]:
                high = mid - 1
            else:
                low = mid + 1
        
        # 插入值到正确的位置
        for j in range(i, low, -1):
            collection[j] = collection[j - 1]
        collection[low] = value_to_insert
    
    # 返回排序后的集合
    return collection


if __name__ == "__main__":
    # 获取用户输入,将其转换为整数列表
    user_input = input("Enter numbers separated by a comma:\n").strip()
    try:
        unsorted = [int(item) for item in user_input.split(",")]
    except ValueError:
        print("Invalid input. Please enter valid integers separated by commas.")
        raise
    
    # 打印经过二分插入排序后的结果
    print(f"{binary_insertion_sort(unsorted) = }")

 

标签:sort,binary,二进制,插入排序,collection,insertion,sorted,True
From: https://www.cnblogs.com/mlhelloworld/p/18001083

相关文章

  • 二进制和十六进制
    二进制特点:满二进一。在硬件中,0代表低调平,1代表高电平。在软件中,0和1是构成所有程序的基础。 8个位的数据为例子:00000000 -->000000001 -->100000010 -->200000011 -->3……位运算:左移、右移00000001 -->1左移1位得到00000010 -->2,移动之......
  • 什么是二进制
    一、二进制的起源二进制(Binary)是由德国数学家和哲学家莱布尼茨首先提出来的。二进制是一种记数系统,只使用0和1两个数字来表示数,逢二进一。二进制在计算机科学、电子工程、数学等领域中得到了广泛的应用,因为可以很方便地表示和处理数字、图像、音频和视频等信息。当然,最重要的一个原......
  • 读数据是用二进制数表示的有感
    在C和Java等高级语言编写的程序中,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表示的。所以只要掌握了使用二进制数来表示信息的方法及其运算机制,就自然能够了解程序的运行机制。一、用二进制数表示计算机信息的原因计算机的内部是由IC构成的。IC有几种不同的......
  • 鸿蒙二进制数组创建
    背景c++层数据都是二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。接口napi_create_arraybuffer:这个接口只能创建空的二进制数组,没办法把char的内容丢进去创建napi_create_external_arraybuffer:这个接口支持......
  • MySQL Shell 8.0.32 for GreatSQL编译二进制包
    MySQLShell8.0.32forGreatSQL编译二进制包构建MySQLShell8.0.32forGreatSQL0.写在前面之前已经写过一篇前传MySQLShell8.0.32forGreatSQL编译安装,最近再次编译MySQLShell二进制包时,发现了一些新问题,因此重新整理更新本文档。1.几处新问题这次编译MySQLShe......
  • C++实现直接插入排序、冒泡排序、快速排序、选择排序(含调试程序)
    #include<iostream>#include<fstream>#include<string>#include<vector>#include<algorithm>usingnamespace::std;classSolution{public: //直接插入排序 voidinsertsort(vector<int>&num){ for(inti=1;i<num......
  • [转][Java] 二进制、八进制、十进制、十六进制
    //二进制7System.out.println(0b111);//八进制73System.out.println(0111);//十进制111System.out.println(111);//十六进制273System.out.println(0x111);基本数据类型整数byte、short、int、long浮点数float、double字符  char布尔 boolean......
  • C#对象二进制序列化优化:位域技术实现极限压缩
    目录1.引言2.优化过程2.1.进程对象定义与初步分析2.2.排除Json序列化2.3.使用BinaryWriter进行二进制序列化2.4.数据类型调整2.5.再次数据类型调整与位域优化3.优化效果与总结1.引言在操作系统中,进程信息对于系统监控和性能分析至关重要。假设我们需要开发一个监控程序,该......
  • 数据库使用二进制表示的
    2.1——IC是集成电路的简称,有模拟ic和数字ic。IC的一个引脚只能表示0V和5V两种状态。二进制数的位数一般是8的倍数。8位二进制数被称为一个字节。字节是最基本的信息计量单位。2.2——数值的表现方法,进位计数制中各数位上可能有的数值的个数。十进制的基数是10,二进制数的基数是......
  • 在K8S中,二进制与Kubeadm安装有何区别?
    在Kubernetes(K8S)的部署中,二进制安装和使用Kubeadm工具进行安装的主要区别在于复杂性和灵活性:二进制安装手动与细致:通过下载官方提供的各个组件(如kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kubectl等)的二进制文件并手动配置每个组件的方式进行......