数据结构基本算法之高等排序(python版本)

简介: 数据结构基本算法之高等排序(python版本)

一、归并排序

1、任务要求

请用python编写一个程序,用归并排序法将包含N个元素(用户自行输入)的数列按升序排列。

2、解题思路

首先以整个数组为对象执行mergeSort函数,mergeSort函数是将给定的列表数组每次都分割成两个左右子列表数组,对两个左右子列表数组又分别递归执行mergeSort函数,并用merge函数每次将两个左右子列表数组进行递归排序和整合成分割前的数组。

3、代码及结果

def mergeSort(arr):
    if(len(arr) < 2):
        return arr
    middle = len(arr) // 2
    left = arr[0:middle] # 截片0到middle-1,属于左子列表数组
    right = arr[middle:] # 截片middle到最后一个列表元素,属于右子列表数组
    return merge(mergeSort(left), mergeSort(right))
def merge(left,right):
    result = [] # 排序从小到大
    while left and right: # 左右列表都有元素存在需要比较大小
        if left[0] <= right[0]: # 相同元素左列表优先
            result.append(left.pop(0))
        else:
            result.append(right.pop(0))
    while left: # 左列表存在元素
        result.append(left.pop(0))
    while right: # 右列表存在元素
        result.append(right.pop(0))
    return result # 返回每次左右列表合并排序后的结果
x = list(map(int,input().split())) # 输入需要排序的列表元素
print(mergeSort(x)) # 输出排序后的列表结果

二、分割法

1、任务要求

请用python编写一个程序,用分割法将包含N个元素(用户自行输入)的数列执行分割,数列相邻元素用空格隔开,用作分割基准的元素用“[ ]”标出。

2、解题思路

将列表数组元素依次与分割基准元素std进行大小比较,若小于则向前和数组中前面大于分割基准元素的第一个元素进行位置和数值交换,不断循环最后直到完成基准分割元素和大于它的第一个元素进行位置和数值交换,最后按要求输出。

3、代码及结果

def partitions(arr): # 分割函数
    std = arr[-1] # 分割基准元素赋值
    w = [] # 记录大于分割基准元素的数组下标
    for i in range(len(arr)):
        if arr[i] > std:
            w.append(i)
        else:
            if w: # 若为空时无法交换,就不动元素的位置
                j = w.pop(0)
                temp = arr[i]
                arr[i] = arr[j]
                arr[j] = temp
                w.append(i) # 元素交换后相应下标会同时改动,所以重新加入下标列表
    for k in range(len(arr)):
        if k == j: # 最后一次交换前的列表下标也是分割基准元素最后的归处
            print("[" + str(arr[k]) + "]",end=" ")
        else:
            print(arr[k],end=" ")
x = list(map(int,input().split())) # 输入
partitions(x) # 调用分割函数

三、快速排序法

1、任务要求

请用python编写一个程序,用快速排序法将包含N个元素(用户自行输入)的数列按升序排列。

2、解题思路

首先以整个数组为对象不断进行分割,每次分割就是将列表数组元素依次与分割基准元素std进行大小比较,若小于则向前和数组中前面大于分割基准元素的第一个元素进行位置和数值交换,不断循环最后直到完成基准分割元素和大于它的第一个元素进行位置和数值交换,然后定下基准分割元素不动,其余以基准分割元素为中间值继续左右分割,最后按要求输出。

3、代码及结果

def partitions(arr,l,r): # 分割函数
    std = arr[r] # 分割基准元素赋值
    j = l # 指向比基准元素大的值的第一个数组下标
    i = j
    while i < r: # 循环与分割基准元素进行比较
        if arr[i] <= std:
            arr[i],arr[j] = arr[j],arr[i] # 交换值
            j += 1
        i += 1
    arr[r],arr[j] = arr[j],arr[r] # 最后一次交换前的列表下标也是分割基准元素最后的归处
    return j # 返回分割基准元素的下标,等同于定位
def quicksorts(arr,l,r): # 快速排序函数
    if l < r :
        q = partitions(arr,l,r) # 返回每次分割基准元素的下标,等同于定位
        quicksorts(arr, l, q - 1) # 递归左排序
        quicksorts(arr, q + 1, r) # 递归右排序
x = list(map(int,input().split())) # 输入
a = len(x) - 1
quicksorts(x,0,a) # 调用快速排序函数
print(x) # 输出排序后的结果

四、计数排序

1、任务要求

请用python编写一个程序,用计数排序法将包含N个元素(用户自行输入)的数列按升序排列。

2、解题思路

首先将输入数组的各个元素分别对应到w数组的下标上(也就是输入数组元素的值对应w的下标的值,元素重复的次数对应w[下标]的值),每次对应上w数组下标的值时,w[下标]的值自加1,然后再根据w数组的下标的值,从头开始用w[下标]的值循环递减到0,将w的下标的值依次添加到arrs数组,最后按要求输出。

3、代码及结果

def countingsorts(arr): # 计数函数
    w = [] # 统计输入的列表中各元素的次数
    arrs = [] # 排列结果列表
    maxindex = max(arr) + 1 # 输入的列表中的元素的最大值加1
    for k in range(maxindex):
        w.append(0) # 根据输入的列表中的元素的最大值加1进行数组所有元素元素初始化0
    for i in arr: # 元素对应w列表的下标进行数目统计
        w[i] += 1
    for i in range(len(w)):
        while w[i] > 0: # 根据列表w的统计数目进行排序赋值给arrs数组
            arrs.append(i)
            w[i] -= 1
    return arrs
x = list(map(int,input().split())) # 输入
print(countingsorts(x)) # 输出

想要了解更多数据结构基本算法(python版本):请点击打开此文章链接


相关文章
|
7天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
28 10
|
16天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
79 29
|
16天前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
72 25
|
16天前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
58 23
|
16天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》图、查找、排序专题考点(含解析)
408考研——《数据结构》图,查找和排序专题考点选择题汇总(含解析)。
68 29
|
25天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17
|
1月前
|
搜索推荐 C++
【C++数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】
快速排序是一种高效的排序算法,基于分治策略。它的主要思想是通过选择一个基准元素(pivot),将数组划分成两部分。一部分的元素都小于等于基准元素,另一部分的元素都大于等于基准元素。然后对这两部分分别进行排序,最终使整个数组有序。(第一行是元素个数,第二行是待排序的原始关键字数据。本关任务:实现快速排序算法。开始你的任务吧,祝你成功!
41 7
|
1月前
|
存储 人工智能 算法
【C++数据结构——内排序】二路归并排序(头歌实践教学平台习题)【合集】
本关任务是实现二路归并算法,即将两个有序数组合并为一个有序数组。主要内容包括: - **任务描述**:实现二路归并算法。 - **相关知识**: - 二路归并算法的基本概念。 - 算法步骤:通过比较两个有序数组的元素,依次将较小的元素放入新数组中。 - 代码示例(以 C++ 为例)。 - 时间复杂度为 O(m+n),空间复杂度为 O(m+n)。 - **测试说明**:平台会对你编写的代码进行测试,提供输入和输出示例。 - **通关代码**:提供了完整的 C++ 实现代码。 - **测试结果**:展示代码运行后的排序结果。 开始你的任务吧,祝你成功!
36 10
|
1月前
|
搜索推荐 算法 数据处理
【C++数据结构——内排序】希尔排序(头歌实践教学平台习题)【合集】
本文介绍了希尔排序算法的实现及相关知识。主要内容包括: - **任务描述**:实现希尔排序算法。 - **相关知识**: - 排序算法基础概念,如稳定性。 - 插入排序的基本思想和步骤。 - 间隔序列(增量序列)的概念及其在希尔排序中的应用。 - 算法的时间复杂度和空间复杂度分析。 - 代码实现技巧,如循环嵌套和索引计算。 - **测试说明**:提供了测试输入和输出示例,帮助验证代码正确性。 - **我的通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了代码运行的测试结果。 通过这些内容,读者可以全面了解希尔排序的原理和实现方法。
59 10
|
1天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。

热门文章

最新文章

推荐镜像

更多