數(shù)組排序,sort()函數(shù)
<script type="text/javascript">
?function sortNum(a,b) {
?return a - b;
//升序,如降序,把“a - b”該成“b - a”
}
var myarr = new Array("80","16","50","6","100","1");
?document.write(myarr + "<br>");
?document.write(myarr.sort(sortNum));
</script>
這里為什么sortNum()函數(shù)里return a-b就定義了升序?
2016-03-10
首先,題主要明確什么是冒泡排序。說白了就是兩兩比較
冒泡排序:它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。
這個(gè)算法的名字由來是因?yàn)樵酱蟮脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端,故名。
//百度百科:http://baike.baidu.com/link?url=x3j1m3MP7w4PCz0OhJF7cJCbGmVSfGeE5cdxeQtMmXjhIXubh45qb8J_ZX3EVtc2zkb1wEm0cXijFePkzlyOc_
接下來,讓我們來看sort()方法
myArray.sort(sortMethod);
隨便定義一個(gè)sortMethod函數(shù):
?function sortNum(a,b) {
?return a - b;
//升序,如降序,把“a - b”該成“b - a”
}
/*注意:?該函數(shù)要比較兩個(gè)值,然后返回一個(gè)用于說明這兩個(gè)值的相對(duì)順序的數(shù)字。比較函數(shù)應(yīng)該具有兩個(gè)參數(shù) a 和 b,其返回值如下:?
? 若返回值<=-1,則表示 a在排序后的序列中出現(xiàn)在 b之前。
? 若返回值>-1 && <1,則表示 a 和 b 具有相同的排序順序。
? 若返回值>=1,則表示 a 在排序后的序列中出現(xiàn)在 b之后。*/
這是什么意思呢就是說,計(jì)算機(jī)本身并不根據(jù)大小排序,它根據(jù)你寫的sort()里面的函數(shù),就是sortMethod,它的返回值來決定哪個(gè)數(shù)在先,哪個(gè)數(shù)在后。
?function sortNum(a,b)注意,這個(gè)a,b順序是不變的,計(jì)算機(jī)根據(jù)函數(shù)返回值判斷二者先后關(guān)系?。?!
舉個(gè)例子,a=100 b=20 ? ? a-b>=1說明a肯定比b大吧,然后就返回了1,sort方法一看,你這個(gè)返回值大于1啊,a就應(yīng)該在b后面,然后繼續(xù)比較下一組數(shù),就是用冒泡排序的方法比較下一組數(shù),你想,如果比較大的那個(gè)數(shù)往后排,這不就是升序嗎?
然后,你想降序,把函數(shù)改成b-a了,現(xiàn)在sort方法得到的返回值是b-a的了,現(xiàn)在a還是100,b還是20,b-a<=-1,sort方法一看,你這個(gè)返回值小于-1啊,a就應(yīng)該在b前面,然后,繼續(xù)冒泡排序,現(xiàn)在的情況是,比較小的那個(gè)數(shù)往后排,這不就是降序嗎?
2016-03-10
sort的參數(shù),為一個(gè)函數(shù),那么這個(gè)函數(shù)接受2個(gè)參數(shù),a, b
這個(gè)函數(shù)在:
a == b 是為0
a > b 時(shí)為 1
a < b時(shí) 為-1