有些时候即便是思路再正确也总有考虑不到的地方,而经验让我们一点点填平不足。
冒泡排序:
//大泡“浮”到右端 function bubbleSort1(arr){ var i=arr.length, j; var temp; while(i>0){ for(j=0;j<i-1;j++){ if(arr[j]>arr[j+1]){ temp = arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } i--; } return arr; } //这种方式是小泡“浮”到左端 function bubbleSort2(arr) { for (var i = 0; i < arr.length; i++) { for (var j = arr.length; j > 0; j--) { if (arr[j] < arr[j - 1]) { var temp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = temp; } } document.write(i+" :"+arr+"<br/>"); } return arr; }
插入排序:(中间有个找了好久才找到的错误)
function insertSort1(arr){ for (var i = 1; i < arr.length; i++) { var key = arr[i]; for(var j=i-1;j>=0&&arr[j]>key;j--){ arr[j+1] = arr[j]; // arr[j] = key;//正确位置 } // arr[j] = key;//错误位置 document.write(arr+" i="+i+" j="+j+"<br/>"); /* 错误位置原因: i=1而j=0的时候不满足j循环的条件,然后往下执行到arr[j] = key;则arr[0]为6,arr[1]也是6,所以出错,而,j初始值为i的话就很好地避免了这个错误。(如第二种方法,或者放到j的for循环中) 6,6,90,2,5,11,24,1 i=1 j=0 6,90,90,2,5,11,24,1 i=2 j=1 6,6,90,90,5,11,24,1 i=3 j=-1 6,6,6,90,90,11,24,1 i=4 j=-1 6,6,11,90,90,90,24,1 i=5 j=2 6,6,24,90,90,90,90,1 i=6 j=2 6,6,6,24,90,90,90,90 i=7 j=-1 */ }; return arr; } /*个人推荐这种*/ function insertSort2(arr) { for (var i = 1; i < arr.length; i++) { var temp = arr[i]; for (var j = i; j > 0 && temp < arr[j - 1]; j--) { arr[j] = arr[j - 1]; } arr[j] = temp; document.write(i+" :"+arr+"<br/>"); } return arr; }
时间: 2024-10-05 05:07:26