js的數組排序
給出一個無需的數字數組,讓寫冒泡排序:
解析:冒泡排序是指由第一項數與第二項的數相比較,第一項大的話兩者互換位置,若第二項大的話就位置不變;
在接着比較第二第三項,比較結果重復上一個步驟;(內for循環)
第一次比較完后在從第二項開始在按上一環節比較;(外for循環)
只到循環完最后第二項為止;
舉例數組 arr = [3,56,4,1,34,78,23,59,66,42];
//冒泡排序 function arrSort(arr){ var len = arr.length; for(var i = 0; i <len; i++){ //確定需要循環的次數 for(var j = 0; j < len-1-i; j++){ if(arr[j]>arr[j+1]){ //相鄰的兩項作比較 var nu = arr[j+1]; arr[j+1] = arr[j]; arr[j]= nu; } } } console.log(arr); } arrSort(arr);
但是這個兩個for循環如果數據量大了會相當消耗內存的運算;因為在每次內for循環一次完畢后都以找出一個最大數放在最后的位置,
外循環沒粗循環到最后幾位都要重新循環,為節省循環次數在每次內for循環最后一次換位置的地方做標記;
2.改進冒泡排序:
function arrSort2(arr){ var i = arr.length-1; while (i>0) { console.log(i)//這里依次由大到小打出arr的每項數據位置索引(除去第一項0), var pos = 0;//每次循環將標記的位置定位0; for(var j=0;j<i;j++){ if(arr[j]>arr[j+1]){ pos=j; var nu = arr[j+1]; arr[j+1] = arr[j]; arr[j]= nu; } } i=pos;//最后一個交換的位置; } console.log(arr); } arrSort2(arr);
節省了一些不必要的循環,提高了運算速度!