直接插入排序(从小到大)
- 基本思想:将一个记录插入到已经排好序的有序表中,得到一个新的,记录数加1的有序表。
1 function insertSort(arr){ 2 var i,j,temp=0; 3 for(i=1;i<arr.length;i++){ 4 if(arr[i]<arr[i-1]){ 5 temp=arr[i]; 6 for(j=i-1;arr[j]>temp;j--){ 7 arr[j+1]=arr[j]; 8 } 9 arr[j+1]=temp; 10 } 11 } 12 } 13 var arr=[5,3,4,6,2]; 14 insertSort(arr); 15 console.log(arr); //[2,3,4,5,6]
temp变量起到哨兵的作用。i从1开始,即假设arr[0]=5的位置固定好了,
第3行中进行主循环,第4行进行判断,如果arr[i]<arr[i-1],则将arr[i]的数放到temp中存放。
从arr[i-1]开始向后进行移位,终止条件为找到arr[j]<=temp的值,此时,将temp放到arr[j+1]的位置(因为进行j--运算)。
不断循环,直至排序所有数值。