第一种也是最简单的也是最耗时的
直接遍历两个数进行排序
public void sort1(){
for (int i = 0; i < CuurentIndex; i++) {
for (int j = 0; j < CuurentIndex-i; j++) {
if (select(j)>select(j+1)){
int temp=selectNode(j).getData();
selectNode(j).setData(select(j+1));
selectNode(j+1).setData(temp);
}
}
}
}
第二种是在找到第一个数据的基础上与下一个进行比较
public void sort2(){
for (int i = 0; i < CuurentIndex; i++) {
for (int j = 0; j < CuurentIndex-i; j++) {
Node node=selectNode(j);
Node next=node.getNext();
if (node.getData()>next.getData()){
int temp=node.getData();
node.setData(next.getData());
next.setData(temp);
}
}
}
}
第三种是先判断是否为头节点(边界判断)|再从头节点出发,再找到下一个与之相比较
public void sort3(){
for (int i = 0; i < CuurentIndex; i++) {
Node node = null;
for (int j = 0; j < CuurentIndex-i; j++) {
if (j==0){
node=head;
}else{
node=node.getNext();
}
Node next=node.getNext();
if (node.getData()>next.getData()){
int temp=node.getData();
node.setData(next.getData());
next.setData(temp);
}
}
}
}
测试代码耗时
public static void main(String[] args) {
Superlink superlink=new Superlink();//head:6毫秒 tail:8291毫秒
long Start=System.currentTimeMillis();//排序性能比较sort1() 1000数据 1005ms ,sort2() 1000数据 271ms ,sort3() 1000数据 30ms
for (int i = 0; i <1000; i++) {
superlink.addToHead((int) (Math.random()*1000));
}
superlink.sort3();
String s = superlink.linkToString();
System.out.println(s);
long end=System.currentTimeMillis();
System.out.println(end-Start);
}



