直接插入排序
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
1. 基本思想
把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序表元素的排序码进行比较,将他插入到有序表的适当位置,使之成为新的有序表。
2. 算法步骤
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
3. 实现逻辑
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2-5
4.动图演示
5.代码实现
function insertSort(arr){
let length = arr.length;
//从第一个位置开始获取数据,插入向有序序列
for(let i = 1;i<length;i++){
//获取i位置的元素,和前面的数据依次进行比较
let tmp = arr[i];
let j = i;
while(arr[j-1] > tmp && j>0){
arr[j] = arr[j-1];
j--;
}
//将j位置的数据插入到tmp
arr[j] = tmp;
}
return arr
}
let arr = [6,0,3,9,8,2,1,5,4,7];
console.log(insertSort(arr));