冒泡排序
冒泡排序是由兩個for循環構成,第一個for循環的變量 j 表示總共需要多少輪比較,第二個for循環的變量 i 表示每輪參與比較的元素下標【0,1,…,length-i】, 因爲每輪比較都會出現一個最大值放在最右邊,所以每輪比較後的元素個數都會少一個,這也是爲什麼 j 的範圍是逐漸減小的。相信大家理解之後快速寫出一個冒泡排序並不難。
let aa = [4, 2, 8, 9, 5, 7, 6, 1, 3];
先聲明一個待排序的數組
function bubbleSort() {
var m = 0;
for (let j = 1; j < aa.length - 1; j++) {
let flag = true;
for (let i = 0; i < aa.length - 1; i++) {
var bb = null;
if (aa[i] > aa[i + 1]) {
bb = aa[i];
aa[i] = aa[i + 1];
aa[i + 1] = bb;
flag = false;
}
m++;
}
if (flag) {
break;
}
// 第 i輪排序的結果爲
console.log("第" + j + "輪排序後的結果爲:" + aa);
}
console.log('冒泡共運行' + m + '次');
}
bubbleSort();
選擇排序
- 從待排序序列中,找到關鍵字最小的元素
- 如果最小元素不是待排序序列的第一個元素,將其和第一個元素互換
- 從餘下的 N - 1 個元素中,找出關鍵字最小的元素,重複(1)、(2)步,直到排序結束
// selectSort();
function selectSort() {
var m = 0;
for (var j = 0; j < aa.length - 1; j++) {
var min = j;
for (var i = j + 1; i < aa.length; i++) {
//拿着本次運行到的最小值去跟剩餘的值做對比
if (aa[i] < aa[min]) {
min = i;
}
m++;
}
if (j != min) {
var bb = aa[min];
aa[min] = aa[j];
aa[j] = bb;
}
console.log("第" + j + "輪排序後的結果爲:" + aa);
}
console.log('選擇排序共運行' + m + '次')
}
插入排序
- 每一步將一個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素爲止。(依次與前邊排好隊的參數比較 需要比較的current_i與 其前邊的數據一一對比 如果比其小 則插入)
function insertSort() {
var m = 0;
for (var j = 1; j < aa.length; j++) {
var tmp = aa[j];
var i = j;
while (i > 0 && tmp < aa[i - 1]) {
aa[i] = aa[i - 1];
i--;
m++;
}
aa[i] = tmp;
console.log("第" + j + "輪排序後的結果爲:" + aa);
}
console.log(aa);
console.log('插入排序共運行' + m + '次')
};
insertSort();