算法--排序
冒泡排序(Bubble Sort)
具体算法思路描述如下:
- <1>.比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- <2>.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- <3>.针对所有的元素重复以上的步骤,除了最后一个;
- <4>.重复步骤1~3,直到排序完成。
function Sort(arr) {var i = arr.length-1; //初始位置 while ( i> 0) { var pos= 0; //每趟开始时,无记录交换 for (var j= 0; j< i; j++) if(arr[j]> arr[j+1]) { pos= j; //记录交换的位置 var tmp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp; } i= pos; //为下一趟排序作准备 }
return arr; }
选择排序(Selection Sort)
算法描述和实现
n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:
- <1>.初始状态:无序区为R[1..n],有序区为空;
- <2>.第i趟排序(i=1,2,3...n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序 从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
- <3>.n-1趟结束,数组有序化了。
function Sort2(arr) { var len = arr.length; var minIndex, temp;for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { //寻找最小的数 minIndex = j; //将最小数的索引保存 } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; }return arr; } var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
Sort2(arr)
归并排序(Merge Sort)
算法描述和实现
具体算法描述如下:
- <1>.把长度为n的输入序列分成两个长度为n/2的子序列;
- <2>.对这两个子序列分别采用归并排序;
- <3>.将两个排序好的子序列合并成一个最终的排序序列。
function Sort3(arr) { //采用自上而下的递归方法 var len = arr.length; if(len < 2) { return arr; } var middle = Math.floor(len / 2), left = arr.slice(0, middle), right = arr.slice(middle); return merge(Sor3t(left), Sort3(right)); } function merge(left, right){ var result = []; while (left.length && right.length) { if (left[0] <= right[0]) { result.push(left.shift()); } else { result.push(right.shift()); } } while (left.length) result.push(left.shift()); while (right.length) result.push(right.shift()); return result; } var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; Sort3(arr);