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);
節省了一些不必要的循環,提高了運算速度!
