实现高效率的冒泡排序
// 自己实现冒泡排序最简单的方式就是使用双层循环 var arr = [10,2,5,7,8,10,10,20,10,18,20,89,6,7,52] // 外层循环是我们需要将每一个数列都排序一次,那么需要排序的数列就是arr.length - 1次 for(var i = 0; i < arr.length - 1 ; i++){ for(var j = 0; j < arr.length - 1 -i; j++){ if(arr[j] > arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp } } } console.log(arr)
// 上面效率是相对较低的,可以参考二分查找以及递归的思路我们实现效率高的排序方法 function quickSort(start,end){ if(start >= end){ return } // 二分查找的标志 var pivot = arr[start]; var left = start; var right = end; // 循环查找当左右不重合时我们交换left和right的位置 while(left != right){ // 循环如果right比标志小那么停止并记录当前位置 while(right > left && arr[right] >= pivot){ right-- } //循环如果left比标志大那么停止并记录当前位置 while(left < right && arr[left] <= pivot){ left++ } // 交换两者位置 if(left < right){ var temp = arr[left] arr[left] = arr[right] arr[right] = temp } } // 如果right = left 那么我们将pivot放于中间位置 arr[start] = arr[left]; arr[left] = pivot; quickSort(start , left - 1); quickSort(right + 1,end); } quickSort(0,arr.length - 1) console.log(arr)