js版插入排序代码及过程演示
JavaScript代码
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let key = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j]; // 移动元素
j--;
}
arr[j + 1] = key; // 插入元素
}
return arr;
}
// 示例数组
let array = [5, 3, 8, 4, 2, 1];
// 调用插入排序函数
let sortedArray = insertionSort(array);
// 输出排序后的数组
console.log(sortedArray); // [1, 2, 3, 4, 5, 8]
排序过程
初始数组:[5, 3, 8, 4, 2, 1]
第一次外循环(i=1)
- 当前元素:3
- 已排序部分:[5]
- 未排序部分:[8, 4, 2, 1]
- 操作:将3插入到已排序部分,得到[3, 5]
- 数组变为:
[3, 5, 8, 4, 2, 1]
第二次外循环(i=2)
- 当前元素:8
- 已排序部分:[3, 5]
- 未排序部分:[4, 2, 1]
- 操作:8已在已排序部分的末尾,无需移动
- 数组保持为:
[3, 5, 8, 4, 2, 1]
第三次外循环(i=3)
- 当前元素:4
- 已排序部分:[3, 5, 8]
- 未排序部分:[2, 1]
- 操作:将4插入到已排序部分,得到[3, 4, 5, 8]
- 数组变为:
[3, 4, 5, 8, 2, 1]
第四次外循环(i=4)
- 当前元素:2
- 已排序部分:[3, 4, 5, 8]
- 未排序部分:[1]
- 操作:将2插入到已排序部分,得到[2, 3, 4, 5, 8]
- 数组变为:
[2, 3, 4, 5, 8, 1]
第五次外循环(i=5)
- 当前元素:1
- 已排序部分:[2, 3, 4, 5, 8]
- 未排序部分:空
- 操作:将1插入到已排序部分,得到[1, 2, 3, 4, 5, 8]
- 数组变为:
[1, 2, 3, 4, 5, 8]
至此,整个数组已经完全排序完成,最终结果为[1, 2, 3, 4, 5, 8]。