字符串根据字典值排序问题
生活随笔
收集整理的這篇文章主要介紹了
字符串根据字典值排序问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? 字符串根據字典值排序問題,就是指對給定的字符串,按照首字母的字典值排序,如果首字母相同的字符串,則按照第二個字母,依次內推,比如說
{"dog","dear","eye","bed"},排序后應該是{"bed","dear","dog","eye"}
? ? ? ?剛開始接觸到這個問題時候,當時想著排序首先按照第一個字母,如果第一個字母相同的那些字符串,再歸為一類,再按照第二個字母排序。。。依次類推。
所以不由自主想到了遞歸,這樣問題就變得比較復雜。
后來仔細想了一下,在這個問題上,我開始時候思路就陷入了一個誤區,不妨可以按照以下思路重新思考這個問題:
? ? ?這個問題和普通的數字排序有什么本質區別?
? ? 普通的數字排序是根據數字的”大小“關系排序 ,那么這個問題呢?其實也是根據字符串的”大小“關系排序,只不過數字的大小關系可能比較簡單,我們用一個比較運算符立馬可以得到結果,而字符串之間的大小關系,稍微復雜了一點點,得將字符串中的字符拆開來,分別比較,直到比較出結果為止。
? ? ? 這樣看來,其實這個排序和普通的排序的唯一區別就是:在比較”大小“的方法上,略有差異,其他邏輯居然完全一樣。所以,我們依然可以用傳統的排序方法,解決這個問題,唯一需要做的就是,重新寫一個比較大小的方法即可。
{"dog","dear","eye","bed"},排序后應該是{"bed","dear","dog","eye"}
? ? ? ?剛開始接觸到這個問題時候,當時想著排序首先按照第一個字母,如果第一個字母相同的那些字符串,再歸為一類,再按照第二個字母排序。。。依次類推。
所以不由自主想到了遞歸,這樣問題就變得比較復雜。
后來仔細想了一下,在這個問題上,我開始時候思路就陷入了一個誤區,不妨可以按照以下思路重新思考這個問題:
? ? ?這個問題和普通的數字排序有什么本質區別?
? ? 普通的數字排序是根據數字的”大小“關系排序 ,那么這個問題呢?其實也是根據字符串的”大小“關系排序,只不過數字的大小關系可能比較簡單,我們用一個比較運算符立馬可以得到結果,而字符串之間的大小關系,稍微復雜了一點點,得將字符串中的字符拆開來,分別比較,直到比較出結果為止。
? ? ? 這樣看來,其實這個排序和普通的排序的唯一區別就是:在比較”大小“的方法上,略有差異,其他邏輯居然完全一樣。所以,我們依然可以用傳統的排序方法,解決這個問題,唯一需要做的就是,重新寫一個比較大小的方法即可。
下面是用最簡單的”冒泡排序“實現的一段代碼:
public class SortByDictionary {public static boolean bigger(String s1, String s2) {int length1 = s1.length();int length2 = s2.length();int i = 0;while (i < length1 && i < length2) {if (s1.charAt(i) > s2.charAt(i)) {return true;} else if (s1.charAt(i) < s2.charAt(i)) {return false;} else {i++;}}if (i == length1) {return false;} else {return true;}}public static void main(String[] args) {String[] s = { "dog", "dear", "eye", "bed", "do", "hello", "zero","fire", "hc", "zz" };for (int i = 0; i < s.length - 1; i++) {boolean change = false; // 用作冒泡排序的標記,如果一趟排序存在交換,則change設為true,說明還需要下一趟排序for (int j = 0; j < s.length - i - 1; j++) {if (bigger(s[j], s[j + 1])) {// swap(s[j], s[j + 1]);String tmp = s[j];s[j] = s[j + 1];s[j + 1] = tmp;change = true;}}if (!change) {break; // 當change為false的時候,說明不需要再冒泡了}}for (int i = 0; i < s.length; i++) {System.out.print(s[i] + " ");}}}
總結
以上是生活随笔為你收集整理的字符串根据字典值排序问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划思想
- 下一篇: android自定义LinearLayo