标签:特点 插入排序 一个 算法 复杂 temp www toc 移动
function bubbleSort(ary) {
let exchange = 0,
temp = null,
n = ary.length;
// i<n-1 而不是 i<n, 当遍历到n-1次时已近排好序了 >,
for(let i=0; i<n-1; i++) {
// 从后面向前遍历, 用前一项比后一项
for(let j = n-2; j>=i; j--) {
if(ary[j+1] < ary[j]) {
temp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = temp;
exchange = 1;
}
}
// 如果没有发生交换(表明排序完成),直接退出排序
if(exchange) break;
}
return ary;
}
效果示例:
function straightInsertionSort(ary) {
let n = ary.length,
temp = null;
for (let i = 1; i < n; i++) {
// 如果后一项小于前一项,说明需要交换
if (ary[i] < ary[i - 1]) {
// temp = 需要交换的项
temp = ary[i];
let j = i - 1;
do {
// 前面的向后面移动
ary[j + 1] = ary[j];
j--;
} while (j >= 0 && temp < ary[j]); // 找到temp需要插入的位置
// 插入temp
ary[j + 1] = temp;
}
}
return ary;
}
效果显示:
function straightSelectSort(ary) {
let n = ary.length,
temp = null;
for(let i=0; i<n-1; i++) {
let k = i;
for(let j = i+1; j<n; j++) {
// 找到最小值的位置
if(ary[j]<ary[k]) k=j;
}
if(k!== i) {
temp = ary[i];
ary[i] = ary[k];
ary[k] = temp;
}
}
return ary;
}
效果示例:
gif来源: 排序算法-散点可视化
标签:特点 插入排序 一个 算法 复杂 temp www toc 移动
原文地址:https://www.cnblogs.com/luoshuifushen/p/12535080.html