排序這需求不用多說,今天來玩玩
值得一提的是這個排序是從之前的筆記中學來的
http://weisnote.blogspot.tw/2012/02/listbox.html現在看看以前還真可愛 雖然是上課作業要用泛型克服 ListBox Sort 字串 排列會有問題
但是其實我做了兩次型別的判斷 真是多餘 =3=
重點在於這個排序法是從 MSDN 上學到的
http://msdn.microsoft.com/zh-tw/library/system.windows.forms.listbox.sort.aspx應該是快速排序法吧
相較於一般很乖的用兩個 for 迴圈 跑半天
他直接使用兩個 while 來進行
每次走訪兩兩比較 並把大值前移
直到無值被交換 則排序結束
這也是少數用到 do while 迴圈的寫法 我喜歡
不說廢話 來看code
javascript 沒泛型 而且沒那麼嚴謹 只需要注意 是否為數值排序
如果以字串排序 "9","7","13","17" 會因為字首1 變成 "13","17","7","9"
2013/1/12 修正版
上面的 swap() 其實有蟲呀 而且是大肥蟲 ZZ
不解釋 順便包成 JQuery 版
(function ($) {
$.parseJsonAndSort = function (jsonStr, field, isNumber) {
var jsonObj = $.parseJSON(jsonStr);
var counter = $(jsonObj).size() - 1;
var swapped;
var swap = function () {
var tmp = jsonObj[counter];
jsonObj[counter] = jsonObj[counter
- 1];
jsonObj[counter - 1] = tmp;
swapped = true;
};
do {
swapped = false;
while (counter > 0) {
if (isNumber) {
var a =
parseInt(jsonObj[counter][field], 10);
var b = parseInt(jsonObj[counter -
1][field], 10);
if (parseInt(jsonObj[counter][field],
10) < parseInt(jsonObj[counter - 1][field], 10)) {
swap();
}
} else {
if (jsonObj[counter][field] <
jsonObj[counter - 1][field]) {
swap();
}
}
counter--;
}
} while (swapped);
return jsonObj;
};
})(jQuery);
沒有留言:
張貼留言