单链表快速排序

基于单链表的快速排序算法(C++) 考研倒计时4天,写个代码放松放松。 国科大19年863最后一题数据结构大题:待排序列采用带头结点的单链表,写出在其上进行的快速排序的递归算法。 算法思想:快排核心思想是每一趟确定一个基元素的最终位置,小于它的在左边,大于它的在右边。题目给了单链表,那就没办法随机访问,但是不影响将一段链表分为两段的操作,那就用几个指针通过一次遍历将一段链表分为两段,然后基元素放中间,最后递归左右两段链表就行了。... 阅读详情

2015.11.27  面试一点资讯 ,面试官是很nice的校友师兄,无奈基本功太差,跪了!

#include <iostream>

using namespace std;

#define random(x) (rand()%x)

struct ListNode
{
	int value;
	ListNode* next;
};

void create_list(ListNode* head)
{
	ListNode* pNode = head;
	for(int i = 0; i < 10; i++)
	{
		ListNode* pNew = new ListNode;
		pNew->value = random(10);
		pNew->next = NULL;

		pNode->next = pNew;
		pNode = pNode->next;
	}
}

void print_list(ListNode* head)
{
	ListNode* pNode = head->next;
	while(pNode != NULL)
	{
		cout << pNode->value << ' ';
		pNode = pNode->next;
	}
	cout << endl;
}

void quick_sort(ListNode* head, ListNode* tail)
{
	if(head->next == tail || head->next->next == tail)
		return;

	ListNode* mid = head->next;
	ListNode* pLess = head;
	ListNode* pGreater = mid;
	int pivot = mid->value;

	ListNode* pNode = mid->next;

	while(pNode != tail)
	{
		if(pNode->value < pivot)
		{
			pLess->next = pNode;
			pLess = pNode;
		}
		else
		{
			pGreater->next = pNode;
			pGreater = pNode;
		}

		pNode = pNode->next;
	}

	pLess->next = mid;
	pGreater->next = tail;

	quick_sort(head, mid);
	quick_sort(mid, tail);
}


int main()
{
	ListNode* head = new ListNode;
	head->value = -1;
	head->next = NULL;
	
	create_list(head);
	print_list(head);
	quick_sort(head, NULL);
	print_list(head);

	return 0;
}


对链表进行快速排序 选择排序 对链表进行相应操作 链表为双向链表 其中的操作有 快速排序 选择排序 插入 删除链表 从链表中获取一个数等等 程序并没有测试周全 欢迎下载 若发现问题希望在我优快云留言 以便及时更改 立即下载

相关推荐

C语言实现多种链表快速排序

C语言实现多种链表快速排序

单链表的快速排序

单链表的特点是:单向。 设头结点位head,则最后一个节点的next指向NULL。如果只知道头结点head,请问怎么将该链表排序?设结点结构为: struct Node{ int key; Node* next; };           那么一般人见到这种题目,立马就会想到指针交换。是的,大家被指针交换的题...

大树叶 技术专栏 5044

快速排序来实现数组、链表的排序

快速排序时目前比较的好的排序方法,相比较的别排序法,例如冒泡法,选择法等等。

单链表的快速排序与归并排序

本文经过2次更新,共介绍了单链表快速排序的2种方法以及单链表的归并排序

FinixLei的专栏 (https://github.com/FinixLei) 9492

深入单链表的快速排序详解

单链表的快排序和数组的快排序基本思想相同,同样是基于划分,但是又有很大的不同:单链表不支持基于下标的访问。故书中把待排序的链表拆分为2个子链表。为了简单起见,选择链表的第一个节点作为基准,然后进行比较,比基准小得节点放入左面的子链表,比基准大的放入右边的子链表。在对待排序链表扫描一遍之后,左边子链表的节点值都小于基准的值,右边子链表的值都大于基准的值,然后把基准插入到链表中,并作为连接两个子链表的桥梁。然后分别对左、右两个子链表进行递归快速排序,以提高性能。但是,由于单链表不能像数组那样随机存储,和数组的快排序相比较,还是有一些需要注意的细节:1、支点的选取,由于不能随机访问第K个元素,因此每

手机OIS马达拆解:从苹果的悬丝到三星的滚珠,不同方案如何影响你的拍照体验?

本文深度解析手机OIS马达技术,对比苹果悬丝式、三星滚珠式和LG记忆合金式三种主流方案的机械原理与成像体验差异。通过详实的数据和测试结果,揭示不同OIS技术如何影响防抖性能、模组厚度及长期可靠性,为摄影爱好者和技术爱好者提供实用选购建议。

weixin_42554408的博客 305

对单链表进行快速排序

快速排序简介 能点进这篇文章的网友们,我相信对快速排序是有一定了解的,这里不详细介绍快速排序的定义,有想进一步掌握快速排序的实现及原理的可参考这篇文章快排的递归及非递归实现 下面进入主题,如何对一单链表进行快排呢?我们知道快速排序的核心在于这样一个步骤,即选择某个元素作为基准base,想办法让待排序的序列中所有小于base的元素在左边,所有大于base的元素在右边,之后分别对base的左边和右边重复上述步骤,最终整个序列有序。为此,我们可以想到,如果对单链表也能进行这样的步骤,即选择单链表的某个元素作为ba

weixin_45685353的博客 2510

SDN:使用Postman控制ODL查看和下发流表

所谓,其实可被视作是SDN对网络设备的数据转发功能的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层的IP地址路由表,SDN交换机中使用的流表也是如此,不过在它的表项中整合了网络中各个层次的网络配置信息,从而在进行数据转发时可以使用更丰富的规则。其流表中的每个表项结果如下图所示:OpenFlow1.3流表的每个表项由6部分组成:1、匹配域:匹配域即OpenFlow1.0流表中的包头域,用于对交换机接收到的数据包的包头内容进行匹配。Ehter Des。

lyhaoyuhangyuan的博客 2535

单链表的排序----快速排序

单链表的快速排序,并举了一个例子

qq_54102536的博客 403

ArcGIS供地图斑图形及属性入库操作(附练习数据)

已知数据: 供地图斑位置图。 供地图斑表格 成果要求:将供地图斑导入mdb数据库并将供地图斑表格的属性进行挂接。 接下来我们开始操作: 1、 打开arcmap,在目录内连接的文件夹内找到供地图斑位置图。图片 2、 将annotation和polygon添加到arcmap图片 3、 右击文件所在文件夹新建mdb数据库图片 4、 右击数据库新建要素数据集。(要素数据集非常重要,稍后所有操作都在数据集内进行)选择图斑投影方式及代号。图片 5、 右击要素数据集—导入(将图层内的数据导入数据库)图片 6、 数据导入.

qq_43173805的博客 8132

Visio 2013安装遇阻?手把手教你搞定注册表权限错误1402(附64位系统特殊处理)

本文详细解析了Visio 2013安装过程中常见的注册表权限错误1402问题,特别是在64位系统下的特殊处理方法。通过分步指导如何修改注册表权限、处理Wow6432Node分支以及使用高级工具如subinacl,帮助用户顺利完成安装并避免常见连带问题。

t8u9v0w1x的博客 543

单链表的快速排序算法及其实现

今天听同学面友录说道单链表是否可以用快速排序算法,想起自己面百度一面的时候面试官也面到这个问题,由于本人是个小菜鸟,所以花了一个下午的时间整理了一下。 算法思想:对于一个链表,以head节点的值作为key,然后遍历之后的节点,可以得到一个小于key的链表和大于等于key的链表;由此递归可以对两个链表分别进行快速。这里用到了快速排序的思想即经过一趟排序能够将小于key的元素放在一边,将大于

philonpang的专栏 1万+

一文吃透 SAP HANA JSON Document Store:从架构到实战的完整指南

本文详细介绍了SAP HANA的JSON Document Store功能,包括其定位、架构、典型场景以及具体使用方法。文章首先分析了半结构化数据场景下传统关系模型的局限性,说明Document Store如何通过集合(Collection)存储JSON文档来提供灵活性。随后详细阐述了启用方式、SQL语法、与Column Store的联动机制,并提供了大量可直接复用的实战案例。特别强调了Document Store作为HANA内建服务的优势,包括企业级一致性、备份恢复等能力。最后给出了数据类型处理和跨引擎协

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 201

单链表进行快速排序

单链表进行快速排序:选择尾元素作为枢轴,根据枢轴值把链表划分为两部分,前半部分值小于枢轴值,后半部分值大于枢轴值,划分函数的返回值为指向排好序链表枢轴前一个元素的指针。这个指针有可能是空指针,我们需要做特殊判断。在快排函数中,我们需要对空指针做特殊处理。以下是完整版代码://对单向链表进行快速排序 #include #include using namespace std; //链表数据结构 s

yang20141109的专栏 947

真随机数与伪随机数

前面我们学习了LFSR,这个玩意落地到具体的应用是什么呢?没错是寄存器,这里在网络找到了几个回答,这里做个记录,下面一起来学习一下吧。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1062

手把手教你搭建工业级C#上位机:完整架构+通信+配置+日志,新手也能落地(附全套源码)

模型层是“数据容器”,统一数据格式,避免参数传递混乱。本文搭建的C#上位机,采用“分层+模块化”架构,解耦了UI、通信、配置、日志四大核心功能,不仅满足工业场景的基础需求,还为后续扩展打下基础。新手跟着步骤走,既能掌握上位机的核心开发技能,又能理解工业级项目的架构设计思路。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1154

单链表快速排序算法的实现

快速排序:    快速排序的主要思想是:    1)选定一个基准元素    2)经过一趟排序,将所有元素分成两部分    3)分别对两部分重复上述操作,直到所有元素都已排序成功    因为单链表只能从链表头节点向后遍历,没有prev指针,因此必须选择头节点作为基准元素。这样第二步操作的时间复杂度就为O(n)。由于之后都是分别对两部分完成上述操作,因此会将链表划分为lgn个段,因此时间复杂度为O(n...

runner668的博客 1万+

[Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,再用该目标函数预测新数据集的未知属性。本章主要讲述分类算法基础概念,并结合决策树、KNN、SVM分类算法案例分析各类数据集,从而让读者学会使用Python分类算法分析自己的数据集,研究自己领域的知识,从而创造价值。 19.1 分类 19.1.1 分类模型 与前面讲述的聚类模型类似

杨秀璋的专栏 2万+

【整理自用】单链表实现快速排序

看了《啊哈!算法》之后,发现自己对于快速排序已经有了理解了。而且那张可爱小人的图也记在心里了。        但是看到LeetCode单链表排序的时候,还是有点不知道能不能用上。第一次查的时候很多答案都说是归并排序,但是这块内容还没有学过,所以就想先放一放。 单链表想如同数组一样实现快排最大的问题在于没有尾指针向前。因此,我第一时间可以判断如果是双向链表结构,应该是可以照搬实现的。    

wushuomin的博客 787

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: UVaOJ 127
下一篇: 快速排序
Praker
博客等级 码龄13年 12粉丝 90原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值