問題是根據字符串的長度對字符串數組進行排序。根據長度對字符串數組進行排序
例如
input = {"cat", "star", "act", "gid", "arts", "dog", "rats"}
output = {"cat", "act", "gid", "dog", "star", "arts", "rats"}
我做到了使用插入排序(使用字符串而非字符串本身的長度)。我的問題:有沒有更好的方法來做到這一點?
我想到的另一種方法是 - 使用TreeMap
將每個字符串及其長度存儲爲值(假定字符串在給定數組中是唯一的)。然後根據它的值對它進行排序。運行時間爲O(nlogn)
,空間複雜度爲O(n)
。你認爲這是一個更好的方法嗎?
編輯:抱歉,不提前提到這一點 - 我想這樣做,而不使用Arrays.sort()
或自定義比較。
插入排序代碼示例:
public static String[] insertionSort(String[] arr) {
for(int i=1;i<arr.length;i++) {
int j = 0;
for(;j<i;j++) {
if(arr[j].length() > arr[j+1].length()) {
String temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
我認爲預期的代碼在時間和空間上都是'O(n)',因爲不需要排序元素,只是[bucket sort]的初始傳遞(http://en.wikipedia.org/wiki/Bucket_sort )。 –
@AlexeiLevenkov:我是否使用桶的二維字符串數組執行此操作? – codewarrior
我不確定你的目標/語言是什麼:我會將長度映射到具有該長度的字符串列表,並在第一次迭代時填充它,而不是簡單地按順序複製所有列表。如果你知道字符串的長度是有限的,你可以只使用數組或數組,並使用第一個索引作爲關鍵字的長度,否則你需要構建/使用散列表來獲得O(1)陣列。 –