数组的排序算法
关于排序算法请看这篇文章。
本文尝试使用js来实现一部分简单的算法。
选择排序
思路:若要从小到大排序,指定索引为1的数值,与其后面的数值一一比较,将较小的数值置于该位置,再次指定索引为2的数值,与其后面的数值比较,同样将较小数组置于该位置,然后依次指定之后的索引位置,执行同样的操作,直到最后遍历结束。
function selectSort(arr){ for(var i = 0;i<arr.length;i++){ for(var j = i+1;j<arr.length;j++){ if(arr[i]>arr[j]){ var temp = arr[i]; arr[i] = arr[j]; arr[j] = arr[i] } } } return arr; }
冒泡排序
思路:遍历数组,通过比较两个数大小互换位置,将最大的数排列到数组的末尾,再次遍历将第二大数排列到数组的倒数第二位,依次遍历直到最后
function bubbleSort(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length-i;j++){ if(arr[j] > arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; }
快速排序
实现思路:取数组中间数为基准,遍历数组时将小于基准的数大于基准的数分组存放两个不同的数组,递归,将两个数组再次执行上面操作直到数组的长度为1,操作完成后由小到大进行拼接。
function fastSort(arr){ if(arr.length <= 1){ return arr; } //新建两个数组存放 var fontArr =[], endArr = []; //初始基准位置 var index = Math.floor(arr.length/2); baseVal = arr.splice(index-1,1); for(var i=0;i<arr.length;i++){ if(arr[i] > baseVal){ endArr.push(arr[i]) }else { fontArr.push(arr[i]) } } return arguments.callee(fontArr).concat(baseVal,arguments.callee(endArr)); }
插入排序
实现思路:从前向后遍历数组,遍历某个数值时,将其与前一数值进行比较,若大于前一个数值,则不做处理,若小于则互换位置后在与前一数值进行比较,直到大于前一数值或到数组的开头。
function insertSort(arr){ for(var i = 0;i<arr.length;i++){ var temp = arr[i]; var j = i-1; while(temp < arr[j]){ arr[j+1] = arr[j]; j--; if(j == -1){ break; } } arr[j+1] = temp; } return arr; }
以上排序方法经测试可用,不保证唯一性,后续还会更新其他排序方法。