// 冒泡排序
let arr = [8, 4, 5, 3,9];
/*
* 总共比较次数为arr.length-1次
* 每次的比较次数为arr.length-1次
* 依次递减
*/
let temp; //交换变量标识
// 两层for分别表示当前项与第二项
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1; j++) {
// 如果当前项大于第二项(后一项)则交换
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 打印排序后的数组
console.log(arr);
// 选择排序
let arr2 = [8, 4, 5, 3,9];
let temp2; //交换变量标识
// 两层for分别表示当前项与第二项
for (let i = 0; i < arr2.length - 1; i++) {
for (let j = i + 1; j < arr2.length; j++) {
// 假设第二项是最小值(是则交换/否则继续比较)
if (arr2[i] > arr2[j]) {
temp2 = arr2[i];
arr2[i] = arr2[j];
arr2[j] = temp2;
}
}
}
// 打印排序后的数组
console.log(arr2);
// 希尔排序算法
function xier(arr) {
let interval = parseInt(arr.length / 2); //分组间隔设置
while (interval > 0) {
for (let i = 0; i < arr.length; i++) {
let n = i;
while (arr[n] < arr[n - interval] && n > 0) {
let temp = arr[n];
arr[n] = arr[n - interval];
arr[n - interval] = temp;
n = n - interval;
}
}
interval = parseInt(interval / 2);
}
return arr;
}
let arr3 = [8, 4, 5, 3,9];
// 打印排序后的数组
console.log(xier(arr3));
// sort排序
let arr4 = [8, 4, 5, 3,9];
arr4.sort(function (a, b) {
/*
* return b-a; —> 降序排序
* return a-b; —> 升序排列
*/
return a - b;
});
//括号里不写回调函数则默认按照字母逐位升序排列
// 打印排序后的数组
console.log(arr4);
// 插入排序
let arr5 = [8, 4, 5, 3,9];
for (let i = 0; i < arr5.length; i++) {
let n = i;
while (arr5[n] > arr5[n + 1] && n >= 0) {
let temp = arr5[n];
arr5[n] = arr5[n + 1];
arr5[n + 1] = temp;
n--;
}
}
// 打印排序后的数组
console.log(arr5);