import java.util.Random;
public class LinkBubbleModifyNodeValue {
public Node head;
private Integer num;
public void init(int num,Node node) {
this.num=num;
this.head=node;
}
class Node{
private Integer data;
private Node next;
}
/*使用尾插发创建链表*/
public void createLink() {
Random random=new Random(1);
Node tail=head;
Integer datas[]= {10,25,19,26,5,25,27,19,1,20};
for(int i=0;i<num;i++) {
/*Integer data=(int) (1+Math.random()*(30-1));*/
System.out.print(datas[i]+" ");
Node newNode=new Node();
newNode.data=datas[i];
tail.next=newNode;
tail=newNode;
}
bubbleSort();
}
/*
* 冒泡排序:
* 1.每次循环至少把一个数放到该在的位置
* 2.每排序一次,比较次数减少一次
* 3.当某一次一次都不需要移动时说明已经完全有序了
* 4.需要排序的次数就是原始数组的逆序数
*/
public void bubbleSort() {
for(int i=0;i<num;i++)
{
boolean isflag=false;
Node tail=head.next;
for(int j=0;j<num-i-1;j++) {
Integer data1=tail.data;
Node tailNext=tail.next;
Integer data2=tailNext.data;
if(data1>data2) {
tail.data=data2;
tailNext.data=data1;
isflag=true;
}
tail=tailNext;
}
if(!isflag) {
//每次排序结果输出
Node outNode=head.next;
outPrint(outNode,i+1);
break;
}else {
isflag=false;
//每次排序结果输出
Node outNode=head.next;
outPrint(outNode,i+1);
}
}
}
public void outPrint(Node node,int i) {
System.out.print("\n第"+i+"次排序得到");
while(node!=null) {
System.out.print(node.data+" ");
node=node.next;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkBubbleModifyNodeValue link=new LinkBubbleModifyNodeValue();
link.init(10, link.new Node());
link.createLink();
}
}