`

单链表排序

阅读更多

闲来无事,写了个单链表排序。本人算法很渣,欢迎各种拍砖,各种优化,各种新实现。

以下算法是基于冒泡排序的思想。两两比较将最大的放到最后(冒泡排序是将最小的升到最前)

 

 

单链表节点类SingleLinkNode.java

package link;
public class SingleLinkNode {
	private int data;
	private SingleLinkNode nextNode;
	public SingleLinkNode(int data, SingleLinkNode nextNode) {
		this.data = data;
		this.nextNode = nextNode;
	}
	public int getData() {
		return data;
	}
	public void setData(int data) {
		this.data = data;
	}
	public SingleLinkNode getNextNode() {
		return nextNode;
	}
	public void setNextNode(SingleLinkNode nextNode) {
		this.nextNode = nextNode;
	}
}

 

单链表类SingleLinkList.java

package link;
import java.util.Random;
public class SingleLinkList {
	// the header node of the single link list
	private SingleLinkNode headerNode;
	
	public SingleLinkNode getHeaderNode() {
		return headerNode;
	}
	// construct the single link list which contains 10 nodes
	public SingleLinkList() {
		headerNode=new SingleLinkNode(new Random().nextInt(100),null);
		SingleLinkNode currentNode=headerNode;
		for(int i=0;i<9;i++){
			SingleLinkNode nextNode=new 
			SingleLinkNode(new Random().nextInt(100),null);
			currentNode.setNextNode(nextNode);
			currentNode=nextNode;
		}
	}
	public String toString(){
		String result="";
		SingleLinkNode currentNode=headerNode;
		while(currentNode!=null){
			result+=currentNode.getData()+"-->";
			currentNode=currentNode.getNextNode();
		}
		result+="null";
		return result;
	}
}

 

 排序算法类Utils.java

package link;
public class Utils {
	// base on bubble sort
	public static SingleLinkList sort(SingleLinkList singleLinkList) {
		SingleLinkNode headerNode=singleLinkList.getHeaderNode();
		SingleLinkNode currentNode=headerNode;
		SingleLinkNode nextNode=currentNode.getNextNode();
		if(nextNode==null){
			return singleLinkList;
		}
		SingleLinkNode lastNode=null;
		
		int tempData=-1;
		// if the last node is the second node,the loop is over
		while(headerNode.getNextNode()!=lastNode){
			// check whether the next node is the last node.
			// if yes, then ship this loop.
			if(nextNode==lastNode){
				lastNode=currentNode;
				currentNode=singleLinkList.getHeaderNode();
				nextNode=currentNode.getNextNode();
				continue;
			}
			if(currentNode.getData()>nextNode.getData()){
				// exchange the data
				tempData=currentNode.getData();
				currentNode.setData(nextNode.getData());
				nextNode.setData(tempData);
			}
			currentNode=currentNode.getNextNode();
			nextNode=currentNode.getNextNode();
		}
		return singleLinkList;
	}
}

 

 

 

 

分享到:
评论
2 楼 antlove 2013-03-18  
lijiejava 写道
好帖,支持,顶!!!!

每次都赏脸,谢谢哟。
1 楼 lijiejava 2013-03-16  
好帖,支持,顶!!!!

相关推荐

    单链表排序和多项式分解

    根据给定的信息,本文将详细解析两个主要的IT知识点:单链表排序和多项式分解。 ### 单链表排序 #### 基本概念 单链表是一种基本的数据结构,其中每个元素由数据和指向下一个元素的指针组成。在单链表排序中,我们...

    数据结构实验1 单链表 排序完整报告含代码

    数据结构实验一主要关注的是单链表这一基本的数据结构,以及如何在单链表中进行操作,如创建、排序和插入节点。实验的目标是让学习者熟悉编程环境,掌握线性表动态存储结构的特点,尤其是单链表的特性。实验原理基于...

    WW1.rar_C 单链表 排序_归并排序

    总结来说,"WW1.rar_C 单链表 排序_归并排序"是一个C语言实现的项目,目标是对两个单链表进行归并排序。通过理解单链表的结构和归并排序的原理,我们可以分析和学习`WW1.C`中的实现,从而掌握在链表环境下实现高效...

    简单的单链表排序 —— 学生管理程序

    总的来说,单链表排序是数据结构和算法中的基础操作,对于理解和应用数据结构有重要的意义。通过这个学生管理程序的例子,我们可以看到如何在实际场景中运用链表排序,从而提高数据处理的效率和灵活性。

    单链表排序算法C语言版

    单链表排序,是C语言版的,供初学者参考,有问题请留言。

    单链表的排序,c源代码

    ### 单链表排序C语言实现 #### 一、引言 在计算机科学中,链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。对于链表的排序操作是算法设计中的一个重要主题。本文将...

    Q1045564.zip 问题回答的代码 关于单链表排序插入

    这个问题“Q1045564.zip 问题回答的代码 关于单链表排序插入”涉及的就是如何在已有的单链表中插入新元素并保持其有序状态。 单链表的排序插入通常有两种主要方法:直接插入排序和归并排序。这里我们将重点讨论直接...

    单链表排序 c语言(自己编的,已在vc中运行过,没问题)

    一种简单的单链表排序算法,建立在选择法的基础上。

    单链表排序交换节点算法

    单链表交换节点排序,包括选择法、比较法、排序法。

    shujujiegou.rar_C 单链表 排序_单链表

    4. **排序操作**:对单链表进行排序,常见的方法有冒泡排序、选择排序、插入排序等。由于链表无法像数组那样直接进行索引操作,因此在链表上实现排序可能比数组复杂。例如,插入排序需要遍历链表,找到每个元素的...

    单链表上的简单选择排序算法

    当我们需要在单链表这种非数组结构上进行排序时,需要对基本的简单选择排序算法进行一些调整。接下来,我们将详细探讨如何在单链表上实现简单选择排序。 **一、单链表基础知识** 单链表是一种线性数据结构,由一...

    lianbiao.zip_C 单链表 排序_递增式算法

    判断算法1和算法5生成单链表所表示的集合是否相等。 (10).在主函数中设计一个简单的菜单,分别调试上述算法。 【选作内容】 (11).利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。 (12).采用...

    数据结构中关于带有表头结点的有序单链表

    构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc 指向Lc表中当前最后...

    单链表的冒泡排序

    单链表的冒泡排序,热烈欢迎大家的下载,谢谢谢谢

    C++单链表选择排序

    在这个场景中,我们将讨论如何在C++中实现单链表的选择排序。 首先,我们需要理解单链表的概念。单链表是一种线性数据结构,其中每个元素(节点)包含数据和一个指向下一个元素的指针。在C++中,我们通常通过定义一...

    单链表实现从小到大排序

    本主题将深入探讨如何使用单链表实现从小到大排序。 首先,我们需要定义一个节点类(Node Class)。这个类通常包含两个部分:数据域(data field)用于存储元素值,和指针域(next field)用于链接到下一个节点。...

Global site tag (gtag.js) - Google Analytics