在高中講流程圖以及大學(xué)學(xué)c都會(huì)遇到一些排序珍手,所以對(duì)這些詞我一直都是屬于聽過(guò)路幸,但是是啥具體說(shuō)不清,然后看到書里的一張圖详幽。
作為一個(gè)從小就玩撲克和麻將的我來(lái)說(shuō),在自己抓牌的時(shí)候往往會(huì)一邊抓一邊排(不像現(xiàn)在手游的自動(dòng)排好浸锨,不過(guò)有的是發(fā)完牌唇聘,然后給你排序),然后因?yàn)樽约簩?duì)JQK等哪個(gè)大基本屬于不用過(guò)腦就把牌從大到小排列了柱搜,而如果我們沒(méi)那么熟悉呢迟郎,我們會(huì)拿著抓來(lái)的牌,來(lái)跟手里的第一張牌(左還是右看習(xí)慣吧)比大小聪蘸,然后依次比較宪肖,放到較好合適的地方,然后手里的牌就排好了宇姚。
然后上代碼:
let arr = [5, 2, 8, 4, 3, 10, 7];
for (let j = 1; j < arr.length; j++) {
let key = arr[j],
i = j - 1;
while (i >= 0 && arr[i] > key) {
arr[i + 1] = arr[i];
i = i - 1;
}
arr[i + 1] = key;
}
console.log(arr);//[ 2, 3, 4, 5, 7, 8, 10 ]
先看結(jié)構(gòu)匈庭,是一個(gè)for循環(huán)和while循環(huán)的嵌套夫凸,先不看while循環(huán)浑劳,代碼從上到下對(duì)原數(shù)組沒(méi)有變化,所以如果原數(shù)組本來(lái)就排好了那么就沒(méi)什么影響夭拌,然后看while部分(書中偽代碼的for循環(huán)是j從2開始魔熏,然后while里面的判斷是i>0),當(dāng)前面的元素比后面的元素大鸽扁,那么就把這兩個(gè)調(diào)換蒜绽,比如我們把數(shù)組的元素看成撲克牌,我手里有張5桶现,然后抓來(lái)個(gè)2躲雅,比5小,我就把2插入5前面骡和,然后我抓個(gè)8相赁,發(fā)現(xiàn)都比他小,那么我就把它放在本該在的位置(第三張牌)慰于,然后依次下去钮科,最終就將牌排好,也就是拿抓來(lái)的牌跟他前面的比婆赠,如果遇到比他大的绵脯,那么就插到他前面,不然就在老地方呆著。