一稚伍、概述
1. 常見(jiàn)的排序算法?
1.冒泡排序
每次比較相鄰的兩個(gè)數(shù)苗沧,如果后一個(gè)比前一個(gè)小刊棕,換位置
2.選擇排序
每次站在自己的位置上,往下找崎页,找打最小數(shù)鞠绰,然后和當(dāng)前換位置
3.歸并排序
采用了二分法,左邊一個(gè)排好的數(shù)組飒焦,右邊一個(gè)排好的數(shù)組蜈膨,每次比較左右第一個(gè)數(shù),小的放在一個(gè)新的數(shù)組里
4.快速排序
采用了二分法牺荠,取出中間數(shù)翁巍,數(shù)組,每次和中間數(shù)比較休雌,小的放在左邊灶壶,大的放到右邊
2. 算法沒(méi)有完美的算法,只有合適的算法
3. 怎么去平衡一個(gè)算法好壞杈曲?
1.時(shí)間角度(程序跑多長(zhǎng)時(shí)間)
2.空間角度(硬盤驰凛,越小越好)
二、 冒泡排序
var arr = [12, 233, -90, 23, -80];
function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length; j++) {
if (arr[j + 1] < arr[j]) {
var tmp;//換位置找中間值
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
return arr;
}
document.write(bubbleSort(arr));
三担扑、 二分排序
var arr = [12, 233, -90, 23, -80];
function mySort(arr, s, e) {
if (s > e) {
return [];
} else if (s == e) {
return [arr[e]];
}
var c = Math.floor((s + e) / 2);
var left = mySort(arr, s, c);
var right = mySort(arr, c + 1, e);
var result = [];
while (left.length > 0 || right.length > 0) {
if (left[0] < right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
if (left.length == 0) {
result = result.concat(right);
break;
} else if (right.length == 0) {
result = result.concat(left);
break;
}
}
return result;
};
document.write(mySort(arr, 0, arr.length - 1));
四恰响、 快速排序
var arr = [12, 233, -90, 23, -80];
function quickSort(arr) {
if (arr.length <= 0) {
return [];
}
var cIndex = Math.floor(arr.length / 2);
var c = arr.splice(cIndex, 1);
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < c[0]) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(c, quickSort(right));
};
document.write(quickSort(arr));