快速排序(Quicksort)是對冒泡排序的一種改進(jìn)又活。
快速排序由 C. A. R. Hoare 在 1962 年提出壁顶。它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分叉庐,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小波丰,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序叨恨,整個排序過程可以遞歸進(jìn)行姻乓,以此達(dá)到整個數(shù)據(jù)變成有序序列。
java代碼如下:
package 數(shù)據(jù)結(jié)構(gòu);
public class kuaisupaixu {
? ? public static int quicksort(long arr[],int left,int right,long center){//一開始用最右邊的數(shù)據(jù)作為中間值
? ? int leftenum=left-1;
? ? int rightenum=right;
? ? while(true){
? ? while(leftenum<rightenum&&arr[++leftenum]<center);
? ? while(rightenum>leftenum&&arr[--rightenum]>center);
? ? if(leftenum>=rightenum){
? ? break;
? ? }
? ? else{//如果此時左邊下標(biāo)沒有大于右邊五辽,則互相交換數(shù)據(jù)即可
? ? long change;
? ? change=arr[leftenum];
? ? arr[leftenum]=arr[rightenum];
? ? arr[rightenum]=change;
? ? }
? ? }
? ? long change1;//循環(huán)結(jié)束的位置與中間值數(shù)據(jù)交換
? ? change1=arr[right];
? ? arr[right]=arr[leftenum];
? ? arr[leftenum]=change1;
? ? return leftenum;//得到的位置作為下一次排序的中間值
? ? }
? ? public static void display(long arr[]){//打印數(shù)據(jù)
? ? for(int i=0;i<arr.length;i++){
? ? System.out.print(arr[i]+" ");
? ? }
? ? System.out.println("\n");
? ? }
? ? public static void sort(long arr[],int left,int right){//遞歸進(jìn)行排序
? ? if(right-left<=0){
? ? return;
? ? }
? ? else{
? ? long point=arr[right];//設(shè)置關(guān)鍵字
? ? int rr=quicksort(arr,left,right,point);
? ? sort(arr,left,rr-1);//對左邊快速排序
? ? sort(arr,rr+1,right);//對右邊快速排序
? ? }
? ? }
}
測試:
package 數(shù)據(jù)結(jié)構(gòu);
public class Testkuaisupaixu {
public static void main(String args[]){
long arr[]=new long[10];
for(int i=0;i<10;i++){
arr[i]=(long)(Math.random()*99);
}
kuaisupaixu.display(arr);
kuaisupaixu.sort(arr, 0, arr.length-1);
kuaisupaixu.display(arr);
}
}
最后輸出結(jié)果如下:
好啦,這次就到這里啦办斑,有問題可以和我留言哦!
其他博客的鏈接:
歡迎各位訪問哦杆逗,這次就到這里啦乡翅!