两个数组:待排序数组
disorderArray
和有序数组orderArray
从待排序数组中取一个数disorderArray[i]
依次和有序数组中每一个数比较
小于元素orderArray[j]
时
先将位置j
及以后的元素向后移动一位
再插入到位置j
上
一直都不小于,
则直接插入到orderArray[orderArray.length]
上算法
disorderArray[i]
和orderArray[j]
比较时:
从左向右,条件disorderArray[i]<orderArray[j]
从右向左,条件disorderArray[i]>orderArray[j]
若是加上等于,能够少比较一次,可是要多作一次移动数组
function InsertSort(disorderArray) { var i, j, k; var orderArray = []; //第0个元素不用排序 orderArray[0] = disorderArray[0]; //从第1个元素开始,依次取出待排序数组中的元素 for (i = 1; i < disorderArray.length; i++) { //依次和有序数组元素比较 for (j = 0; j < orderArray.length; j++) { //小于等于元素,则找到了要插入的位置orserArray[j] if (disorderArray[i] < orderArray[j]) { break; } //若是j == orderArray.length,那么disorderArray[i]是最大的 //直接插入到j位置,不用再移动orderArray } //将位置j及以后的元素后移一位,j == orderArray.length时正好跳过循环 for (k = orderArray.length; k > j; k--) { //有序数组会增1,从length+1开始从后向前到j插入到j+1 orderArray[k] = orderArray[k - 1]; } //插入到合适的位置 orderArray[j] = disorderArray[i]; } console.log(orderArray); } var disorderArray = [5, 3, 8, 1, 6, 4]; InsertSort(disorderArray);
一个数组:
orderArray
首先将orderArray[0]
当作有序数组
而后从orderArray[1]
开始插入到有序数组中
目标就是将待排部分所有插入到有序部分code
function InsertSort(orderArray) { //辅助交换 var temp; //依次取出待排序部分的元素orderArray[i],从1开始 for (var i = 1; i < orderArray.length; i++) { //待排部分和有序部分从右向左进行比较 for (var j = i - 1; j >= 0; j--) { //待排元素大于则插入,找到要插入的位置j+1 if (orderArray[i] >= orderArray[j]) { break; } } temp = orderArray[i]; //待排元素位置到插入位置之间的元素须要移动 for (i; i > j + 1; i--) { orderArray[i] = orderArray[i - 1]; } orderArray[j + 1] = temp; } } var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8] InsertSort(orderArray); console.log(orderArray);
待排部分和有序部分比较时
若待排元素小于有序元素,则将有序元素后移
若待排元素大于等于有序元素,则待排元素位置肯定,插入该位置
跳出这次循环
目标任然是将待排元素插入到有序部分排序
比较条件写到
for
循环中io
function InsertSort(orderArray) { //辅助交换 var temp; //依次取出待排序部分的元素orderArray[i],从1开始 for (var i = 1; i < orderArray.length; i++) { temp = orderArray[i]; //待排部分和有序部分从右向左进行比较 for (var j = i - 1; j >= 0 && temp < orderArray[j]; j--) { //待排元素小于则后移 orderArray[j + 1] = orderArray[j]; } //待排元素插入 orderArray[j + 1] = temp; } } var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8] InsertSort(orderArray); console.log(orderArray);
待排部分和有序部分比较时
若待排元素小于有序元素,则二者进行位置交换,继续比较
若待排元素大于等于有序元素,则待排元素位置肯定,跳出这次循环
目标任然是将待排元素插入到有序部分console
每次只是进行两个元素的比较
其中一个是待排元素
这种方式可能不是直接插入排序function
function InsertSort(orderArray) { //辅助交换 var temp; //依次取出待排序部分的元素orderArray[i],从1开始 for (var i = 1; i < orderArray.length; i++) { temp = orderArray[i]; //待排部分和有序部分从右向左进行比较 for (var j = i - 1; j >= 0; j--) { //待排元素小于则交换位置 if (temp < orderArray[j]) { orderArray[j + 1] = orderArray[j]; orderArray[j] = temp; } else { break; } } } } var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8] InsertSort(orderArray); console.log(orderArray);