首先,我们先建立Node.java存放我们的节点
public class Node {
public int data;
public Node next;
@Override
public String toString() {
return "Node [data=" + data + ", next=" + next + "]";
}
}
我们的数组
int[] arr = new int[] {30,20,10,40,50,60,32,22,10,35,64,22,13,16,27,42,41,49,46,50,-10,-5,17,-20,-14,29,31,34,38,48,42};
这个时候我们需要数组转链表
怎么转呢?
/**
* 头插法
* @param arr
* @return
*/
public static Node listToLink2(int[] arr) {
Node link=null;
for(int a:arr) {
Node n=new Node();
n.data=a;
n.next=link;
link=n;
}
return link;
}
/**
* 尾插法
* @param arr
* @return
*/
public static Node listToLink(int[] arr) {
if(arr.length<1) {
return null;
}
Node link=new Node();
link.data=arr[0];
Node flag=link;
for(int i=1;i<arr.length;i++) {
Node n=new Node();
n.data=arr[i];
flag.next=n;
flag=flag.next;
}
return link;
}
最后就是我们的排序算法了
/**
* 快速排序 链表版
* @param link
* @return
*/
public static String sortarr2(Node link) {
if(link==null) {
return "";
}
if(link.next==null) {
return link.data+",";
}
int flag=link.data;
link=link.next;
Node left=null;
Node right=null;
while(link!=null) {
if(link.data<flag) {
Node le=new Node();
le.data=link.data;
le.next=left;
left=le;
}else {
Node ri=new Node();
ri.data=link.data;
ri.next=right;
right=ri;
}
link=link.next;
}
return sortarr2(left)+flag+","+sortarr2(right);
}
最后结果: