快速排序應該是應用最廣泛的排序算法了,它實現簡單,一般情況下比其他算法都要快。快速排序算法用到了遞歸的方法,它將數組的一個元素作爲參照物,然後小於該元素的數據放到該元素的左邊,大於該元素的數據放到該元素的右邊,再以相同的方法對左邊的數據和右邊的數據進行操作,最後實現整個數組的有序
下面的代碼是普通的快速排序代碼
代碼:
import java.util.Scanner; public class QuickSort { public static void Quick(int data[],int s,int t) { int i=s; int j=t; int temp; if(s<t) { temp=data[s]; while(i!=j) { while(j>i && data[j]>temp) j--; data[i]=data[j]; while(i<j && data[i]<temp) i++; data[j]=data[i]; } data[i]=temp; Quick(data,s,i-1); Quick(data, i+1, t); } } public static void main(String[] args) { Scanner s = new Scanner(System.in); int num=s.nextInt(); int data[] = new int[num]; for(int i=0;i<num;i++) { data[i] = s.nextInt(); } Quick(data,0,num-1); for(int i=0;i<num;i++) { System.out.print(data[i]+" "); } } }
分析:
然後我在想該怎麼說呢
。。。
算了,直接寫一段排序過程更直接
上面的快速排序確實很簡單,但是有一個問題,那就是如果數據有很多重複的元素,那麼上面的算法就會浪費很多時間對相同的元素進行排序,三向切分的快速排序是對快速排序的一種優化,適合處理含有重複元素的數據
public static void Quick2(int data[],int s,int t) { int i=s; int j=t; int k=s+1; int temp=data[s]; if(t>s) { while(k<=j) { //change(int data[],int a,int b) //將數組下標爲a和b的元素互換 if(data[k]<temp) change(data,i++,k++); else if(data[k]>temp) change(data,k,j--); else k++; } Quick2(data, s, i-1); Quick2(data, j+1, t); } }