单链表的基本操作二——排序 (java)

Java经典算法之快速排序算法 快速排序是一种分治法(Divide and Conquer)的排序算法,由英国计算机科学家Tony Hoare于1960年提出。其基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有元素均比另一部分的元素小,然后分别对这两部分继续进行排序,最终达到整个序列有序的效果。 阅读详情

单链表的基本操作二——排序

快排 & 插入排序

class Sort{
	/**
	 * 单链表的快速排序
	 */
	public static void quickSort(Node head,Node end) {
		if (head != end) {
			Node node = part(head, end);
	        quickSort(head, node);
	        quickSort(node.getNext(), end);
	    }
	}
	
	public static Node part(Node head,Node end) {
		System.out.println((head == null?null:head.getData()) + "----" + (end == null?null:end.getData()));
		Node p1 =  head, p2 = head.getNext();
		
		while(p2 != end) {
			
			if (p2.getData() < head.getData()) {
				p1 = p1.getNext();
				if (p1 != p2) {
					int tmp = p1.getData();
					p1.setData(p2.getData());
					p2.setData(tmp);
				}
			}
			p2 = p2.getNext();
			
		}
		
		if (p1 != head) {
			int tmp = head.getData();
			head.setData(p1.getData());
			p1.setData(tmp);
		}
		return p1;
	}
	
	/**
	 * 单链表的插入排序
	 */
	public static Node insertSort(Node head) {
		if(head == null || head.getNext() == null) return head;
		
		Node p1 = head.getNext();
		Node p = head;
		Node tmp = new Node(-999); //始终指向头节点
		tmp.setNext(head);
		
		while (p1 != null) {
			
			if (p.getData() > p1.getData()) {
				
				p.setNext(p1.getNext()); //删除 p1节点
				
				Node tmp1 = tmp;//tmp1指向头结点
				Node tmp2 = tmp.getNext();
				while(tmp2.getData() < p1.getData()) { //和p1做比较,便于找到p1的合适位置
					
					tmp1=tmp2;
					tmp2 = tmp2.getNext();
				}
				// tmp1 < p1 < tmp2  所以把p1放到tmp1 和tmp2之间
				tmp1.setNext(p1);
				p1.setNext(tmp2);
				
				//移动指针,处理下一个节点
				p1 = p.getNext();
				
			}else {
				p = p1;
				p1 = p1.getNext();
			}
		}
		System.out.println(tmp.getNext().getData());
		return tmp.getNext(); //返回头结点
	}
	
	public static void main(String[] args) {
		LinkList list = new LinkList();
		Node n1 = new Node(4);
		Node n2 = new Node(2);
		Node n3 = new Node(5);
		Node n4 = new Node(3);
		Node n5 = new Node(7);
		Node n6 = new Node(9);
		Node n7 = new Node(0);
		Node n8 = new Node(1);
		n1.setNext(n2); n2.setNext(n3); n3.setNext(n4); n4.setNext(n5); n5.setNext(n6); n6.setNext(n7); n7.setNext(n8);
		System.out.println("排序前");
		list.printList(n1);
		System.out.println("排序后");
//		quickSort(n1, null);  快排
		
		list.printList(insertSort(n1));
	}
	
}

 

Java单链表基本操作(七)--排序 单链表的插入操作比数组麻烦,因为每次都都要从头节点开始往后遍历,头节点也需要单独处理package listnode; /** * @author Gavenyeah * @date Start_Time:2016年4月1日 下午14:07:04 * @date End_Time:2016年4月1日 下午15:55:04 */ public class SortList { p 阅读详情

相关推荐

【链表】【排序】单链表的选择排序【java】

1.题目: 题目描述 给定一个无序单链表,实现单链表的选择排序(按升序排序)。 输入描述: 第一行一个整数 n,表示单链表的节点数量。 第二行 n 个整数 val 表示单链表的各个节点。 输出描述: 在给出的函数内返回给定链表的头指针。 示例1 输入 复制 5 1 3 2 4 5 输出 复制 1 2 3 4 5 2.代码 主要思路:直接...

qq_29295351的博客 1594

【Java】快速排序

本文介绍了快速排序的原理优点,以及如何选取基准元素,交换元素的方法等。

zcxyywd的博客 2万+

数据结构实验报告——排序算法设计及分析(排序单链表)

一、实验目的和要求 通过学习多种排序算法,体会对同一种操作多种不同的算法设计;通过比较各排序算法对于数据存储结构的要求,体会算法设计不依赖于数据存储结构,而算法实现依赖于数据存储结构:通过分析排序算法的效率,研究如何进一步提高算法性能的方法。 要求掌握每种排序算法思路、算法描述、算法设计 与算法实现手段,掌握排序算法时间复杂度和空间复杂度的分析方法,具有排序算法的设计能力。 二、实验题目 实验一:由单链表构造排序单链表 public SortedSinglyList(SinglyList&lt

weixin_45823684的博客 3971

Java 快速排序

快速排序是一种常用的基于比较的排序算法,其时间复杂度为 O(nlogn),并且具有稳定性和广泛的应用场景。本文将全面详细的讲解一下 Java 中快速排序算法的原理、实现以及时间复杂度等问题。

兴趣是最好的老师,勤能补拙 1万+

Java实现单链表的基本操作

单链表是一种常见的基础数据结构,其每个节点都包含数据和一个指向下一个节点的指针。它通过节点间的串联实现数据的存储和访问。在单链表的数据结构中,每一个节点被封装为一个对象,这个对象通常被称为Node类。Node类是整个链表结构的基石,它的属性定义直接决定了链表的基本形态和功能。一般来说,Node类至少包含两个属性:一个是存储数据的数据域(data),另一个是指向下一个节点的指针(next)。数据域用于存储节点的具体信息,比如整数、字符或者其他复杂的数据类型;

weixin_42465140的博客 531

维护测试监控LLM应用

LangFuse: 开源 + SaaS(免费/付费),LangSmith 平替,可集成 LangChain 也可直接对接 OpenAI API;LangSmith: LangChain 的官方平台,SaaS 服务(免费/付费),非开源,企业版支持私有部署;调试 Prompt 的 Playground测试/验证系统的相关指标数据集管理各种指标监控与统计:访问量、响应时长、Token 费等等。

SunnyRivers 1779

【JAVA】快速排序

快排的基本详解

qq_61862008的博客 9492

OriginPro实战:5步搞定碳材料拉曼光谱D峰G峰分析(附完整数据处理流程)

本文详细介绍了使用OriginPro进行碳材料拉曼光谱D峰G峰分析的完整流程,涵盖数据预处理、多图层可视化、高精度分峰拟合等关键步骤。特别针对材料科学研究中的基线漂移、多峰重叠等问题提供专业解决方案,帮助研究者快速完成从原始数据到科研级图表的全流程分析,提升碳材料表征效率与准确性。

vodka的博客 942

java 实现快速排序

1.介绍 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序 过程可以递归进行,以此达到整个数据变成有序序列。 2.切分原理 切分原理: 把一个数组切分成两个子数组的基本思想: 1.找一个基准值,用两个指针分别指向数组的头部和尾部; 2.先从尾部向头部开始搜索一个比基准值小或等于的元素,搜索到即停止,并记录指针的位置; 3.再从头部向尾..

m0_46306264的博客 1万+

京东商品数据爬取实战:用Selenium+代理IP绕过最新反爬机制(附完整代码)

本文深入解析京东商品数据采集技术,详细介绍了如何利用Selenium与智能反反爬策略绕过京东最新的反爬机制。通过实战案例和完整代码,帮助开发者掌握高效采集京东商品数据的方法,包括动态参数加密、行为验证识别及分布式采集架构设计等关键技术。

cc789的博客 1058

AD9026芯片开发实战指南:从硬件配置到射频校准

本文为AD9026芯片开发实战指南,详细解析了从硬件设计、电源时钟配置、SPI初始化到多芯片同步与JESD204高速链路建立的完整流程。重点探讨了射频校准技术,包括初始化校准与跟踪校准,以保障5G、MIMO等现代通信系统所需的射频性能。旨在帮助开发者系统掌握这颗高性能射频收发器的应用,规避常见设计陷阱。

tomato的博客 851

java单链表排序

在线手写 java单链表排序 单链表每个节点为: public class Node { int val; Node next; public Node(int val) { this.val = val; } } 复制代码 如果一个单链表为2->1->3->5->4,经过排序后链表结构为1->2->3-&g...

weixin_34138521的博客 1645

反激电源反馈环路设计:UC3842的FB脚与COMP脚接法对比与选型

在开关电源设计中,PWM控制器与光耦的反馈环路接法直接影响系统稳定性与动态响应。UC3842作为经典电流模式控制器,其FB脚和COMP脚分别对应内部误差放大器的输入与输出,决定了环路补偿由内部还是外部承担。FB脚接法利用内部基准和运放,设计简单、成本低,适合小功率适配器;COMP脚接法旁路内部运放,补偿网络外置,动态响应快、精度高,适合中大功率工业电源。理解两种接法的原理与差异,有助于在反激电源设计中优化环路补偿,提升负载调整率和批量一致性。

weixin_31887307的博客 316

单链表的排序

传统排序大多依靠下标帮助,而链表结构的缺点是不能按照下标访问,只能逐个遍历,那么如何给单链表排序呢?

体系化很难,碎片归纳很简单。 1011

ROS2 DDS中间件(图文并茂+超详细)

DDS 的目标场景在端上,致力于使端上的应用可以更容易的进行通信,由于它的完全分布式架构,可以方便的将端上的应用拆分为多进程架构,从而提高端的容错能力。从产品定位角度来讲,它和 Chromium 中的 mojo 都是端上的通信中间件,只不过 mojo 不强调分布式,内部集成了更多的特定于端上的机制,比如句柄的传输,消息的缓存等。但由于 mojo 生于 Chromium,目前官方并没有把它独立出来,所以用起来比较不方便。而 DDS 或许可以在简单的场景下作为 mojo 的替代品。

weixin_39939185的博客 5281

用人话讲明白线性回归LinearRegression

目录 什么是回归 一元线性回归 损失函数 最小二乘估计 小结 1. 什么是回归 当我们学习一门新课程、接触一个新专业时,总会对该领域的专有名词感到困惑,甚至看完解释仍难以理解其含义。在我们一起学习machine learning的过程中,我会尽量对相关名词用“人话”做一遍解释,以减少学习的“痛苦感”。 譬如今天要学的线性“回归”,这个回归(regression)和我们平时说的“回归祖国”的回...

化简可得 1万+

使用JAVA实现单链表的建立、测长、打印、删除、插入、排序、逆置

关于链表,百度百科对其 链表中的数据是以节点来表示的,每个节点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个节点的地址数据。 以“结点的序列”表示线性表称作线性链表(单链表) 单链表是链式存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。 因此,查找第 i 个数据元素的基本操作为:移动指针,比较

lb891014的专栏 1752

二十一、SAP-库存管理

业务逻辑、功能讲解、图文解析、章节总结

m0_72403327的博客 1808

单链表的基本操作

java实现单链表 Node实体类类标识 public class Node { //内部类(节点) int data; Node next; //构造函数(创建新节点) public Node(int data) { this.data = data; this.next = null; } //可以创建带头结点的单链表节用无参构造 public Node() { } } 单链表基本操作 pub

csdn099的博客 272

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

单链表排序(Java)

单链表排序 (牛客网—牛客题霸算法篇—NC70) 题目描述 给定一个节点数为n的无序单链表,对其按升序排序。 思路 Java实现 可以将单链表的每一个节点看作是数组的索引下标,对单链表的排序就可以看作是对数组进行排序,但需要注意的是,单链表的排序只能用简单选择排序。 在使用简单选择排序时,只需要交换两个节点的值,而不需要交换节点,就像数组排序时,我们也只是交换对应位置的值,而没有把数组的索引下标进行交换(数组的索引下标是不能交换的哦,这里只是打个比方) 代码实现 import java.util.*; /

ln01010的博客 2564

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

单链表的选择排序

//单链表的选择排序 public class SelectSortList{ //单链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data) { this.value=

ZCC的专栏 4472

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

单链表快速排序(Java)

思路: 1、以头节点为base,依次遍历,与base比较,比base小的放前面;返回base指针 2、递归调用上述过程 代码: package com.datastructure.link; /** * 单链表快排 */ public class SingleLinkedListQuickSort { static class Node { int value; ...

聚沙成塔 1653

插入排序单链表 Java实现

前言 V2EX上有人问多少人可以在一小时内做出来,面试题插入排序单链表 题目:让你用你熟悉的语言写一个插入排序单链表的算法题,你可以在一小时内写出来吗,并配上单元测试,同时编译通过 单元测试 1: Input: 4->2->1->3 Output: 1->2->3->4 单元测试 2: Input: -1->5->3->4->0 Out...

ALEX的博客 1263

java实现链表冒泡排序_单链表的冒泡排序

起因今天利用空余时间在九度做ACM的时候,需要对单链表进行排序,由于单链表不是随机存取结构,所以我不建议用快速排序,因此采用了冒泡排序!带头节点的尾插法构建单链表//初始化带头节点的链表struct lnode *head, *s, *r, *p;head = malloc(sizeof(struct lnode));r = head;for(i = 0; i < n; i ++){scan...

weixin_36035610的博客 1117

拓扑排序-java

主要通过宽度优先搜索(BFS)来实现有向无环图的拓扑序列,邻接表存储图。数组模拟单链表、队列,实现BFS基本操作。

m0_63267251的博客 1529
上一篇: 单链表的基本操作一 (Java)
下一篇: 数据结构之栈(java)
^^_candice
博客等级 码龄10年 3粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值