插入排序的基本思想:首先选取数组的第一项即a[0],我们可以认为这个数是已经排好序的,再取a[1]项插入到已经排好序的元素中,此时只有a[0],所以我们需要比较a[1]和a[0]的大小。如果a[1]<a[0],则需要把a[1]先用一个临时变量temp保存,a[0]往后挪一位(即a[1]的位置),然后把temp赋值给a[0]。要插入的元素依次为a[1]-a[a.length-1]项,插入每一项时,都需要从后往前遍历已排好序的元素,如果已排好序的元素比要插入的元素大,则把该元素往后挪一位,直到已排好的元素小于等于要插入的元素(或者已经遍历完了已排好序的数组项),则把要插入的元素放入该位置+1的索引中(或者放在数组的第0个位置)。对每个插入项都执行上面的操作,则最后的数组就排好序了。
function insertSort(arr){ var temp=null;//定义一个临时变量保存要插入元素的值 for(var i=1; i<arr.length; i++){//从索引位置1开始遍历数组 if(arr[i]<arr[i-1]){//只有要插入的元素小于已排好序的最大元素的时候才需要进行下面的操作 temp=arr[i];//把要插入的元素赋给一个临时变量 var p=i-1;//已排好序的数组的最后一项索引为i-1 while(temp<arr[p] && p>=0){//如果要插入的元素小于已排好序的元素并且没有到已排好数组的开始位置 arr[p+1]=arr[p];//把大于要插入元素(temp)的已排好序元素位置往后挪一位 p--;//从后往前便利已经排好序的元素 } arr[p+1]=temp;//把要插入的元素插入到已排好序的数组中,索引位置为p+1 } } return arr;//返回已排好序的数组 }