闲来无事,写了个单链表排序。本人算法很渣,欢迎各种拍砖,各种优化,各种新实现。
以下算法是基于冒泡排序的思想。两两比较将最大的放到最后(冒泡排序是将最小的升到最前)。
单链表节点类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; } }
相关推荐
单链表排序和多项式分解
北邮 数据结构 实验一 单链表创建 排序 含代码
单链表排序,是C语言版的,供初学者参考,有问题请留言。
一种简单的单链表排序算法,建立在选择法的基础上。
Q1045564.zip 问题回答的代码 关于单链表排序插入 https://ask.csdn.net/questions/1045564
单链表交换节点排序,包括选择法、比较法、排序法。
用C语言编写的有关,两个单链表的归并排序操作.
编写程序完成单链表的创建、插入、删除、排序、并、交、差运算、及输出等基本操作。
以单链表为存储结构实现简单选择排序的算法
判断算法1和算法5生成单链表所表示的集合是否相等。 (10).在主函数中设计一个简单的菜单,分别调试上述算法。 【选作内容】 (11).利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。 (12).采用...
by Koma http://blog.csdn.net/wangningyu/archive/2010/09/19/5893595.aspx
构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc 指向Lc表中当前最后...
单链表的冒泡排序,热烈欢迎大家的下载,谢谢谢谢
链表的排序,c\c++源代码,自己想了想,有时这样是有需要的,虽然很麻烦
单链表实现从小到大排序,包括节点类,单链表类以及主函数!
C++单链表选择排序, 这个程序我已经不记得是不是我自己写的了,呵呵,放上来供初学者参考.