快速排序 Java实现-数组-链表
2016-04-05 14:59
399 查看
数组实现
链表实现
public class Node {
int val;
Node next;
public static void quicksort(Node begin,Node end){
if(begin!=end){
Node partition=getpartition(begin,end);
quicksort(begin,partition);
quicksort(partition.next,end);
}
}
public static Node getpartition(Node begin,Node end){
int val=begin.val;
Node p=begin;
Node q=p.next;
int temp;
while(q!=end){
if(q.val<val){
p=p.next;
temp=p.val;
p.val=q.val;
q.val=temp;
}
q=q.next;
}
begin.val=p.val;
p.val=val;
return p;
}
public static void main(String[] args) {
Node a1=new Node();
Node a2=new Node();
Node a3=new Node();
Node a4=new Node();
Node a5=new Node();
Node a6=new Node();
Node a7=new Node();
Node a8=new Node();
a1.val=1; a1.next=a2;
a2.val=3; a2.next=a3;
a3.val=94;a3.next=a4;
a4.val=2; a4.next=a5;
a5.val=5; a5.next=a6;
a6.val=764;a6.next=a7;
a7.val=-23;a7.next=a8;
a8.val=9;a8.next=null;
quicksort(a1,null);
Node temp=a1;
while(temp!=null){
System.out.print(temp.val+" ");
temp=temp.next;
}
}
}
public static void quicksort(int[] a,int l,int r){ if(l<r){ int i=l,j=r; int temp=a[i]; while(i<j){ while(i<j && a[j]>=temp){ j--; } if(i<j){ a[i++]=a[j]; } while(i<j && a[i]<temp){ i++; } if(i<j){ a[j--]=a[i]; } } a[i]=temp; quicksort(a,l,i-1); quicksort(a,i+1,r); } } public static void main(String[] args) { int[] a={1,2,3,1,2,44,24324,43,24,754,145}; quicksort(a,0,a.length-1); for(int i:a){ System.out.print(i+" "); } }
链表实现
public class Node {
int val;
Node next;
public static void quicksort(Node begin,Node end){
if(begin!=end){
Node partition=getpartition(begin,end);
quicksort(begin,partition);
quicksort(partition.next,end);
}
}
public static Node getpartition(Node begin,Node end){
int val=begin.val;
Node p=begin;
Node q=p.next;
int temp;
while(q!=end){
if(q.val<val){
p=p.next;
temp=p.val;
p.val=q.val;
q.val=temp;
}
q=q.next;
}
begin.val=p.val;
p.val=val;
return p;
}
public static void main(String[] args) {
Node a1=new Node();
Node a2=new Node();
Node a3=new Node();
Node a4=new Node();
Node a5=new Node();
Node a6=new Node();
Node a7=new Node();
Node a8=new Node();
a1.val=1; a1.next=a2;
a2.val=3; a2.next=a3;
a3.val=94;a3.next=a4;
a4.val=2; a4.next=a5;
a5.val=5; a5.next=a6;
a6.val=764;a6.next=a7;
a7.val=-23;a7.next=a8;
a8.val=9;a8.next=null;
quicksort(a1,null);
Node temp=a1;
while(temp!=null){
System.out.print(temp.val+" ");
temp=temp.next;
}
}
}
相关文章推荐
- java学习笔记(六)
- java实现终止javaw.exe线程
- java基本语法
- java 枚举类总结
- Java并发编程系列之十七:Condition接口
- 关于Java线程的sleep(),wait(),notify(),notifyall(),interrupt()等各种方法
- Java 项目优化实战
- ssh整合时struts出现unknown location的问题
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- Set中 addAll() 的简单使用
- AS项目库用到eclipse中
- java23种设计模式总结