js陣列的排序
阿新 • • 發佈:2018-10-31
1.javascript的sort()方法:
<script> var array = [ 1, 4, 9, -7, 0, 11, -10, 49, -60, 78]; function compare(val1, val2) { return val1 - val2; } console.log(array.sort(compare));// compare函式是一種比較函式,在這裡作為sort()方法的引數; //sort()方法按照升序排列陣列項,會呼叫每個陣列項的toString()方法,然後比較得到字串; //toString()方法是吧布林值或者BooleanObject轉換為字串,然後返回結果; // </script>
2、氣泡排序:(從後向前):
- 比較相鄰元素:如果第一個比第二個大,就交換他們的位置;
- 對每一對相鄰元素做1步驟的工作,從第一對相鄰元素到最後一對相鄰元素,最後一個元素應該是最(大或者小)的;
- 針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
<script> var array = [ 1, 4, 9, -7, 0, 11, -10, 49, -60, 78]; function ssort(arr) { if(arr.length <=1) { return; } for(var j = 0; j < arr.length; j++) { //兩兩比較,如果前一個比後一個大,則交換位置。 for(var i = 0; i < arr.length-1-j; i++) { if(arr[i] > arr[i+1]) { var temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } } return arr; } console.log(ssort(array)); </script>
3、快速排序方法:(遞迴,兩邊快速排序,這個方法我是在兄弟連的php課程上看到的)
<script> var array = [ 1, 4, 9, -7, 0, 11, -10, 49, -60, 78]; function quickSort(arr) { if(arr.length <= 1) { return arr; } //取得中間值的索引 var index = Math.floor(arr.length/2); //取到中間值 var temp = arr.splice(index,1); //定義左右兩部分陣列 var left = []; var right = []; for(var i = 0; i < arr.length; i++) { //如果元素比中間值小,那麼放在左邊,否則放在右邊 if(arr[i] < temp) { left.push(arr[i]); }else { right.push(arr[i]); } } return quickSort(left).concat(temp, quickSort(right)); } console.log(quickSort(array)); </script>
Math.floor(x)方法是向下取整,返回小於或等於x的最接近的整數。
splice(index,num,item)方法是向陣列中新增專案,或是從陣列中刪除專案,並返回被刪除的專案。
- index是整數,被操作專案所在的位置(必須)
- num是整數,要刪除的專案的數量,如果為0,表示不刪除(必須)
- item是向陣列中新增的新專案,可以是多個(可選)
push()方法是向陣列末尾新增一個或多個新專案並返回新陣列的長度
concat()方法連線兩個或多個數組,不會改變原有陣列,返回一個新陣列
4、插入序法:
- 從第一個元素開始,可以降第一個元素定為已經排序的;
- 取出下一個元素,在已經排序的元素序列中掃描;
- 如果該元素(已排序)大於新元素,將該元素移到下一位置
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置,將新元素插入到下一位置中;
- 重複步驟2
function insertSort(arr) {
if(arr.length <= 1) {
return arr;
}
//假設第0個元素是有序序列,第1個元素之後是無序的序列,從第1個元素開始依次將無序序列的元素插入到有序序列中
for(var i = 1; i < arr.length; i++) {
if(arr[i] < arr[i-1]) {
//取出無序序列中最需要插入的第i個元素
var temp = arr[i];
//定義有序中的最後一個位置
var j = i - 1;
arr[i] = arr[j];
//比較大小,找到插入的位置
while(j >= 0 && temp < arr[j]) {
arr[j+1] = arr[j];
j--;
};
//插入
arr[j+1] = temp;
}
}
return arr;
}
5、選擇排序法:
function selectSort(arr) {
if(arr.length <= 1) {
return arr;
}
for(var i = 0; i < arr.length; i++) {
//設定當前範圍最小值和索引
var min = arr[i];
var minIndex = i;
//在該範圍選出最小值
for(var j = i+1; j < arr.length; j++) {
if(min > arr[j]) {
min = arr[j];
minIndex = j;
}
}
//將最小值插入,並將原來位置的最小值刪除
arr.splice(i, 0, min);
arr.splice(minIndex+1, 1);
}
return arr;
}
- 在未排序序列中找到最小(大)元素
- 並存放到排序序列的起始位置;
- 然後,再從剩餘未排序元素中繼續尋找最小(大)元素;
- 然後放到已排序序列的末尾。
- 以此類推;