記錄一下氣泡排序和sort()排序
阿新 • • 發佈:2018-12-29
今天有空,整理了一下寫過的javascript排序方法。排序方法很多,我瞭解的不算多,這裡記錄下知道的氣泡排序和js自帶的sort()排序。
1. 氣泡排序
function BubbleSort(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 temp = arr[j+1]; //元素交換 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; } var arr=[5,1,0,9,3,10,26,8]; console.log(BubbleSort(arr)); //[0, 1, 3, 5, 8, 9, 10, 26]
2. 這裡要說的是sort()排序
值得注意的時,如果陣列是純數字組成的,使用sort()方法並不能得到想要的效果。如下
var arr1=[5,1,0,9,3,10,26,8];
console.log(arr1.sort()); //[0, 1, 10, 26, 3, 5, 8, 9]
這並不是排序的結果。因為sort()的 預設排序方式是按字串排序的。
//按字元排序
var str = ['yangzhou','suzhou','nanjin','beijin'];
console.log(str.sort());//["beijin", "nanjin", "suzhou", "yangzhou"],字元排序(按字元編碼的順序進行排序 ),能得到很好的效果
那怎麼給數字排序呢?
* 可以在javascript中實現自己的回撥函式實現數字陣列的排序
* 回撥函式的工作,它返回:
* 1.如果傳遞給他的兩個元素相等的話,返回0.
* 2.如果認為第一個引數大於第二個引數,將返回一個正數.
* 3.如果認為第一個引數小於第二個引數,將返回一個負數.
升序:
var theArray=[2,3,5,1,15,8,12,11,7];
function des(a,b){
return a-b;
}
console.log(theArray.sort(des));
降序 var theArray=[2,3,5,1,15,8,12,11,7]; function des(a,b){ return b-a; } console.log(theArray.sort(des));
解釋:a,b表示陣列中的任意兩個元素,若return > 0 b前a後;reutrn< 0 a前b後;a=b時存在瀏覽器相容
簡化一下:a-b輸出從小到大排序,b-a輸出從大到小排序。附上,隨機排序
var nums = [1,2,9,10,8,11];
console.log(nums.sort(function(a,b){
return 0.5 - Math.random();
})); //[2, 1, 9, 11, 10, 8]
這裡備註一下:該文章中部分引用了wming3博主的相關知識(http://blog.csdn.net/u010187139/article/details/45933545)。感謝博主的知識分享。