算法练习5---快速排序Java版
基本思想:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
例如 3 1 5 2 7 9 3 0
首先以3為基準(zhǔn)數(shù),基準(zhǔn)數(shù)的意思就是以這個(gè)數(shù)為參考,其他數(shù)和它做比較,現(xiàn)在例如有兩個(gè)人,分別從左邊和右邊開始找,右邊的人要找到比基準(zhǔn)數(shù)3小的數(shù),左邊的人找比基準(zhǔn)數(shù)3大的數(shù),找到以后進(jìn)行交換,右邊的人先開始找,例如上面的數(shù)組,右邊的人從0開始找,0比3小,記錄下這個(gè)數(shù)字,左邊的人從3開始找,找到5比3大, ?,現(xiàn)在把這兩個(gè)數(shù)交換位置得到新的數(shù)組3 1 0?2 7 9 3 5,右邊的人繼續(xù)重復(fù)上述步驟找到2,左邊的人到了2也沒有比3大的數(shù)字,于是兩個(gè)人在數(shù)字2相遇了,就把基準(zhǔn)數(shù)3和這個(gè)2交換,得到新的數(shù)組2 1 0?3 7 9 3 5,把3看做分割點(diǎn),整個(gè)數(shù)組分為兩部分,左邊的2 1 0和右邊的7 9 3 5重復(fù)上述步驟繼續(xù)排序
java代碼如下:
public class QuickSort {public static void main(String[] args) {// TODO Auto-generated method stub QuickSort qs = new QuickSort();int[] score = {10,9,8,7,6,5,4,3,2,1};qs.quickSort(score,0,score.length-1);for(int i=0;i<score.length;i++){System.out.print(score[i]+" ");}}public void quickSort(int[] a,int left,int right){int i,j,t,temp;if(left>right)return;i= left;j = right;temp = a[left];while(i!=j){while(a[j]>=temp && i<j)j--;while(a[i]<=temp && i<j)i++;if(i<j){ t=a[i];a[i]=a[j];a[j]=t;}}a[left]=a[i];a[i]=temp;quickSort(a,left,i-1);quickSort(a,i+1,right);}}?
執(zhí)行結(jié)果:
1 2 3 4 5 6 7 8 9 10?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/paopaoquan/p/6368204.html
總結(jié)
以上是生活随笔為你收集整理的算法练习5---快速排序Java版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何申请广发犀利卡?有什么申请条件?
- 下一篇: 201521123017 《Java程序