使用快速排序对链表进行排序

《Python星球日记》 第72天:问答系统与信息检索 《Python星球日记》 第72天:问答系统与信息检索,在前面的日子里,我们学习了自然语言处理的基础知识,包括文本预处理、词向量、Transformer架构和各种预训练模型。今天,我们将探索问答系统这一NLP的重要应用,以及如何结合信息检索技术构建智能问答系统。 阅读详情

使用快速排序对链表进行排序

本文代码使用python3语法

 

#链表节点
class Node():
    def __init__(self,val):
        self.val = val
        self.prev = None
        self.next = None

#链表
class LinkedList(object):
    def __init__(self):
        self.head = Node(-1)

    #添加
    def add(self,val):
        temp = Node(val)
        if self.head.next == None:
            print("第一次add")
            self.head.prev = temp
            self.head.next = temp 
            temp.prev = self.head
            temp.next = self.head
        else:
            self._add(temp)

    def _add(self,node:Node):
        #尾插
        temp = self.head.prev  #保留之前的
        temp.next = node
        node.next = self.head
        self.head.prev = node
        node.prev = temp

    #顺序显示
    def show(self):
        p = self.head.next
        while p and  p != self.head:
            print(p.val,end=" ")
            p = p.next
        print()

    #逆序显示
    def reverse(self):
        p = self.head.prev
        while p and p!=self.head:
            print(p.val,end=' ')
            p = p.prev
        print()

    #查找
    def search(self,val):
        if self.head.next == None:
            print("还没有节点")
        else:
            self._search(val)

    def _search(self,val):
        p = self.head.next
        while p != self.head:
            if p.val == val:
                return p
            p = p.next
        return None

    #删除
    def delete(self,val):
        if self.head.next == None:
            print("还没有节点")
        else:
            node = self._search(val)
            if not node:
                return 0
            prev_ = node.prev
            next_ = node.next
            prev_ .next = next_
            next_.prev = prev_
            del(node)

    #删第一个元素
    def popleft(self):
        if self.head.next == None:
            print("还没有节点")
        else:
            temp = self.head.next
            self.head.next = temp.next
            temp.next.prev = self.head
            return temp

    #删除最后一个元素
    def popright(self):
        if self.head.next == None:
            print("还没有节点")
        else:
            temp = self.head.prev
            self.head.prev = temp.prev
            temp.prev.next = self.head
            



    #插入
    def insert(self,index,val):
        if self.head.next == None:
            print("还没有节点")
        else:
            temp = Node(val)
            p = self.head.next
            while index:
                p = p.next
                index -= 1

            prev_ = p.prev
            prev_.next = temp
            temp.next = p
            p.prev = temp
            temp.prev = prev_

    def sort(self):
        if self.head.next == None:
            return
        else:
            self._sort(self.head.next,self.head.prev)

    def inRight(self,base,target,scope):
        #判断target是否在base节点的后面n,scope表示此次比较的范围,即[base,scope]
        p = base.next
        while p != scope.next:
            if p == target:
                return True
            p = p.next
        return False


    def _sort(self,left,right):
        #快排
        if self.inRight(left,right,self.head):
            base_val = left.val
            l,r = left,right
            while self.inRight(l,r,right):
                while self.inRight(l,r,right) and  r.val >= base_val:
                    r = r.prev
                if self.inRight(l,r,right):
                    l.val = r.val
                    l = l.next

                while self.inRight(l,r,right) and l.val < base_val:
                    l = l.next
                if self.inRight(l,r,right):
                    r.val = l.val
                    r = r.prev
            l.val = base_val
            self._sort(left,l)
            self._sort(l.next,right)


if __name__ == "__main__":
    a = LinkedList()
    a.add(10)
    a.add(2)
    a.add(3)
    a.add(14)
    a.add(15)
    a.add(5)
    a.add(5)
    a.add(8)
    a.add(9)
    a.add(11)
    a.add(12)

    print("sort before:")
    a.show()

    a.sort()
    print("sort after:")
    a.show()

 

sort before:
10 2 3 14 15 5 5 8 9 11 12
sort after:
2 3 5 5 8 9 1011 12 14 15

零基础入门simulink仿真--通信领域的调制解调技术:基于Simulink的PM信号调制与解调仿真建模示例 PM的基本原理是将基带信号(如语音或音乐信号)加载到高频载波信号的相位上。通过改变载波的瞬时相位,可以实现信息的传输。PM的优点包括抗噪声能力强、频谱利用率较高等,但其解调过程相对复杂。通过Simulink,我们可以通过模块化的建模方式实现PM信号的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的PM信号调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解PM信号调制与解调的基本原理及其应用。所需工具和环境:列出进行PM仿真所需的工具和环境。 阅读详情

相关推荐

PTC-6-2004汽轮机性能计算源代码,pycharm-包括试验计算、一类修正、二类修正-以CC350-16.7/0.98/0.5/538/538型汽轮机为例,5万7千字,过程不易欢迎打赏

汽轮机性能计算完整源代码-简化试验-包括试验计算一类修正计算和二类修正计算目录图 1 工程结构。

weixin_43441028的博客 999

链表的排序

排序链表(以该题为例   给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?(题源自leetcode.148)   显而易见的,对于链表的排序,我们常常使用归并排序,因此这里我将给出三种解法: 首先强调一下,对于链表的操作,最需要注意的几点无非就是dummynode的使用,链表的断开和链表的连接,掌握好这几点,那么很多链表相关的问题就将迎刃而解了。 1.自顶向下的归并排序  类似于数组的归并排

dongfangyuechu21的博客 3202

GPD源码分析

gpd使用示例 先看下面一段代码,为标准gpd算法的使用方法,可以看到输入为点云,cloud_camera_; 输入:std::unique_ptr<gpd::util::Cloud> cloud_camera_ 输出: std::vector<std::unique_ptr<gpd::candidate::Hand>> grasps; // detect grasp poses gpd对象:std::unique_ptr<gpd::GraspDetect.

weixin_41003113的博客 2334

链表的快速排序和归并排序

不同于数组快排和归并排序(见排序归纳总结(插入排序、归并排序、堆排序、快速排序、桶排序)),链表不能够随机访问,只能从链表头遍历至链表尾,针对这一特性,需要对数组的排序算法做相应的调整。 文章目录1. 快速排序2. 归并排序 1. 快速排序 对于链表的快速排序,使用两个指针p和q,使得p和q都只向其next方向进行遍历,同时保证p之前的链表节点的val都小于head的val值,p和q之间的链表节点的val都大于head的val值,则当q遍历到链表末尾时,再将head的val和p的val值进行互换,则就进行

To the beyond and infinity! 2784

Gartner《构建可扩展数据产品建设框架》心得

数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。

2501_91410404的博客 1005

如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能

本文详细介绍了在VMware Workstation虚拟机中配置Nvidia显卡硬件加速的完整流程。重点包括:检查硬件兼容性、安装显卡驱动、编辑VMware配置文件启用PCI直通功能(需修改config.ini文件参数)、为虚拟机分配PCI设备等关键步骤。文章特别强调了配置注意事项,如系统资源需求、BIOS设置要求、驱动兼容性等问题,并建议操作前备份数据。通过此方法可实现虚拟机对Nvidia显卡的直接调用,适用于需要GPU加速的计算场景。

qq_39777550的博客 6702

链表排序相关

文章目录链表结构题目要求一般做法说明选择排序插入排序快速排序归并排序 链表结构 给定的链表要么是单链表、要么是双链表,不过一般是单链表 题目要求 是否可以交换结点的值? 还是只能交换结点,值无法改变? 最简单的要求是我们可以交换结点的值,如果要求只能交换结点的位置,那么代码会变得稍微复杂一些 一般做法 任何时候,我们都可以遍历一次链表,把链表的值拷贝下来存放到数组中,对数组进行排序,然后将排序后的结果依次赋值给链表结点,此时的开销相当于我们对数组排序的基础上增加了遍历的开销 如果不是特别要求的话,直接使用一

655

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动280.1 现象描述280.2 优化分析 openGauss学习笔记-280 ope

超哥的博客 309

对链表进行使用快速排序和归并排序

对单链表进行快速排序 class Solution { public: //交换两个链表结点的元素 void swap(ListNode* a, ListNode* b){ int temp = a->val; a->val = b->val; b->val = temp; } //对链表进行快速排序 //首先进行书写partition函数 ListNode* partition(List

zhpf225的博客 697

金属表面粗糙度对信号的影响

之前的文章中,已经采用CST中的微带线模块进行了很多的仿真分析,本文将再次利用这些模块,从另外一个角度去探讨关于传输线的使用问题--金属的表面粗糙度。 众所周知,数据传输中,当速率越来越高时,信号在金属介质中的趋肤效应就愈发明显,能量就会更多地集中于金属的表面进行流动,此时,如果金属表面不再光滑而是凹凸不平,能量的传输过程就会产生波动,当这种波动积累到一定的量级,就会严重影响到传输线的阻抗稳定性,从而导致信号失真和传输异常。

一只豌豆象的博客 2895

全球SAR卫星大盘点与回波数据处理专栏目录

本专栏将详细介绍各国各地区的SAR卫星的特点和性能,以及SAR回波数据的处理方法和技巧。主要介绍民用和商用SAR卫星,帮助你了解商业SAR卫星的最新动态和技术,MATLAB代码将全部开源。以下是专栏目录,持续更新中。

3163

golang中关于List链表的排序

前言 关于golang中list链表的排序操作文章少之又少,因此基于这个情况,特此写个简单的Demo供大家分享 需求背景 比如,现在有个需求,list链表中存入了用户信息,但是是无序的,需要根据用户的年龄和姓名,给list链表中的数据,进行简单排序 实现 1.定义用户结构体 type Person struct { Name string //名称 Age...

learn8more的博客 1556

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1368

使用qsort函数进行快速排序以及链表的冒泡排序

使用qsort函数进行快速排序以及链表的冒泡排序qsort函数快速排序qsort快速排序二维数组qsort快速排序结构体数组qsort快速排序指针数组(malloc申请空间的二维数组)链表内容的冒泡排序 文章参考传送门: 参考博客1 参考博客2 qsort函数快速排序 qsort快速排序二维数组 对应回调函数如下 int cmp_int(const void* a, const void* b) { return ((int*)a)[2] - ((int*)b)[2]; //从小到大排序 return

weixin_45841983的博客 968

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python 单链表 快速排序_使用快速排序对链接列表排序,链表,进行

使用快速排序对链表进行排序本文代码使用python3语法#链表节点class Node():def __init__(self,val):self.val = valself.prev = Noneself.next = None#链表class LinkedList(object):def __init__(self):self.head = Node(-1)#添加def add(self,va...

weixin_35466750的博客 544

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Java数据结构与算法】快速回忆十大排序 + 使用插入排序、归并排序、快速排序对链表进行排序

Java中Arrays.sort()中用的排序。快速掌握十大排序:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。 链表排序:插入排序、快速排序、归并排序

ly甲烷的博客 727

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C语言使用链表的插入排序、选择排序、快速排序

#include #include #include #include #include typedef int keytype; #define MAXSIZE 20 clock_t clock( void ); typedef struct { keytype key;//某个元素的一些特征,可以还有其他的 }elemtype; typedef struct { elemt

mrgao的博客 1649

单链表快速排序,不直接交换值,不使用额外链表空间,原地交换节点

单链表快速排序,不直接交换值,不使用额外链表空间,原地交换节点 做了数组的快速排序后,想着试一下单链表的快速排序。菜鸟一个 还请指正 单链表快速排序,不直接交换值,不使用额外链表空间,原地交换节点。 单链表快速排序三种解决办法 (1) 直接交换值,相对简单 (2) 额外维护两个链表,用于存放大于基点的节点和小于基点的基点 最后链接 (3) 不直接交换值,不使用额外链表空间,原地交换节点。较为复杂 我的思路: 分区函数中维护多个指针 index: 用于表示基点的正确位置,维护index左边都是小于基点的值 p

weixin_43817994的博客 1045

148使用快速排序解决排序链表问题

【代码】148使用快速排序解决排序链表问题。

wrsxwa的博客 118

[LeetCode专题] 148. 排序链表 使用方法:暴力解法+快速排序+归并排序 全网最详细

148. 排序链表 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例: 输入:head = [4,2,1,3] 输出:[1,2,3,4]

qq_42956868的博客 469

python排序链表快速排序_如何使用python中快速排序算法?

正如我们大家所了解的,如果想使用这个算法,就要求我们要去不断的执行,直到找到最佳的效果演示,想必大家在搜索问题之前,也有过基本的了解吧,比如排序之间肯定是要存在对比的,然后进行优先选择,那么接下来,大家可以学习小编给大家准备的以下内容,进行配合理解哦~2、将下列数组从小到大排序当数组为空或者只有一个数组的时候,不需要排序0#!/usr/Local/bin/ python#一*ー coding:Ut...

weixin_39812577的博客 90

Java数据结构中链表分割及链表排序使用快速排序、归并排序、集合排序、迭代、递归,刷题的重点总结

Java数据结构中链表分割及链表排序使用快速排序、归并排序、集合排序、迭代、递归,刷题的重点总结

xyk:的博客 3253

链表排序--快速排序

使用快速排序对链表进行排序: void q_sort(int numbers[], int left, int right) { int pivot, l_hold, r_hold; l_hold = left; r_hold = right; pivot = numbers[left]; while(left < right) { while (

dliang27的专栏 386

Python 双向链表 快速排序

1、创建链表: from random import randint class DLinkedNode(object): def __init__(self, data=None, pre=None, post=None): self.data = data self.pre = pre self.post = ...

weixin_30357231的博客 500

双向链表的快速排序

#include #include #include //定义类型 所有的排序例子中都是用的int作为data typedef int elemType; //返回值 #define RET_SUCCESS ( 1 ) #define RET_FAILED ( 0 ) //定义链表的长度 #define LIST_MAX_SIZE (10) //定义链

未语愁眸 1万+

链表的快速排序算法

#include<stdio.h> #include<iostream> using namespace std; //定义结构体 typedef struct Node{ int val; Node* next; } Node; void swap(Node* a,Node* b){ int tmp = a->val...

weixin_30618985的博客 97
上一篇: http协议
下一篇: python实现最大堆
ikalpa
博客等级 码龄9年 19粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值