在Java環境下,對字串數組或者對字串排序都是一件很容易的事情,只要調用java.util包下的Arrays類的sort方法即可對其排序。
有沒有想過,我們自己也可以利用排序演算法編寫一個屬於自己的字串數組和字串排序,我就是這麼做的,我利用了快速排序的思想:
* 一趟快速排序是:
*1,隨機產生一數列,選取第一個數(這裡也可選其他的數)作為比較的基石,假設這個數為X,這樣X=A[0];設兩個變數i=0,j=n-1;n是這個數列的長度
*2,從前面開始找,找到第一個比A[0]大的數,找到了就與X交換
*3,從後面開始找,找到第一個比A[0]小的數,找到了就與X交換
*4,重複步驟2,3,直到i=j;
*這樣一趟快速排序就完成了;第一趟完成之後,X左邊的數就全部小於X了,X右邊的數九全部大於X,然後採用遞迴方式對X左邊的數和X右邊的數進行快速排序。
字串數排序代碼如下:
package com.org.tool;/** * 字串數組排序,利用快排的思想 * @author xiaobangsky * time:2014-10-13 * */public class P4_8 {public static void quickSort(String[] pData,int left,int right) { int i,j; String first,temp; i = left; j = right; first = pData[left]; //這裡選其他的數也行,不過一般選第一個 //一趟快速排序 while(true) { //從第二個數開始找大於中樞的數 ,從前面開始找大於pData[left]的數 while((++i)<right-1 && pData[i].compareTo(first)<0); //從最後一個數開始找第一個小於中樞pData[left]的數 while((--j)>left && pData[j].compareTo(first)>0); if(i>=j) break; //交換兩邊找到的數 temp = pData[i]; pData[i] = pData[j]; pData[j] = temp; } //交換中樞 pData[left] = pData[j]; pData[j] = first; //遞迴快排中樞左邊的資料 if(left<j) quickSort(pData,left,j); //遞迴快排中樞右邊的資料 if(right>i) quickSort(pData,i,right); } public static void main(String[] args) {String[] arr = new String[]{"one","onad","Dream","Beijing","Olympic"};quickSort(arr, 0, 5);for(String s:arr){System.out.print(s+" ");}}}字串排序代碼如下:
package com.org.tool;/** * 字元排序,快排思想 * @author xiaobangsky * time:2014-10-13 */public class P4_9 {public static void quickSort(char[] pData,int left,int right) { int first,i,j; char temp; i = left; j = right; first = pData[left]; //這裡選其他的數也行,不過一般選第一個 //一趟快速排序 while(true) { //從第二個數開始找大於中樞的數 ,從前面開始找大於pData[left]的數 while((++i)<right-1 && pData[i] < first); //從最後一個數開始找第一個小於中樞pData[left]的數 while((--j)>left && pData[j]>first); if(i>=j) break; //交換兩邊找到的數 temp = pData[i]; pData[i] = pData[j]; pData[j] = temp; } //交換中樞 pData[left] = pData[j]; pData[j] = (char) first; //遞迴快排中樞左邊的資料 if(left<j) quickSort(pData,left,j); //遞迴快排中樞右邊的資料 if(right>i) quickSort(pData,i,right); } public static void main(String[] args) {char[] arr = "xarvfwegfe".toCharArray();quickSort(arr, 0, 10);for(char s:arr){System.out.print(s);}}}這樣就完成了。