最新因工作原因需要接触到算法,之前学习C++的时候有接触过算法,Javascript中实现算法其实也是大同小异。下面我讲下第一个实现的排序算法--直接插入排序。基本实现思路:假定一个数组中前n(n>=2)个值已经排序好了,那我们就从第n+1个与前面进行比较,当 a[n+1] > a [i] && a[n+1] < a[i-1] 的时候则进行插入,以此类推。
var arr = [23,85,61,37,55,12,63,12,99,39,70,21]; function InsertDirect(arr){ //前两个排序 if(arr[0] > arr[1]){ var temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } //数组过短,就返回。 if(arr.length <=2)return; //执行插入排序(自已实现) /*for(var i=1; i<arr.length;i++){ //比前面都大,就返回 if(arr[i] >= arr[i-1])continue; for(var j=0;j<=i-1;j++){ //执行插入 if((j == 0 && arr[i] <= arr[j]) || (arr[i] <= arr[j] && arr[i] >= arr[j-1])){ var k = j-1<0 ? 0:j; arr.splice(k,0,arr[i]); arr.splice(i+1,1); break; } } }*/ //标准实现 for(var i=0; i<arr.length;i++){ var temp = arr[i]; var j = i-1; //比前面都大,就返回 if(arr[i] >= arr[i-1])continue; for(;j>=0&&temp<arr[j];j--){ arr[j+1] = arr[j]; } arr[j+1] = temp; } return arr; } var arrs = InsertDirect(arr); document.getElementById("app").innerHTML = arrs+"";