排序是咱们平常开发中很是经常使用的一种操做。目前最经典的排序算法有十种,分别是:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序。下面咱们介绍两种最经常使用的排序算法:冒泡排序和快速排序。javascript
冒泡排序实现思想比较简单,可是性能较差,适合做为培训教学使用。主要实现思想是:遍历数据中每个节点,若是不合符咱们预期的顺序则和下一个数据交换位置,依此类推。
java
//交换数组元素
function swap(arr,n,n1) {
let temp = arr[n];
arr[n] = arr[n1];
arr[n1] = temp;
}
//冒泡排序
function bubbleSort(arr) {
for(let i=arr.length-1;i>=0;i--) {
for(let j=0;j<i;j++) {
if(arr[j]>arr[i]) {
swap(arr,j,i)
}
}
}
return arr;
}
复制代码
快速排序是已知排序算法中最快的之一,适合数据量较大的时候使用。其主要实现思想是:先取一个基数(通常取数据的中间位置),而后对基数两边的数据分别排序,比基数大的放右边,比基数小的放左边。以后,对左右两边的数据进行以上相同的操做,直到左右两边数据为空。
git
//快速排序
function quickSort(arr) {
let piovtIndex = Math.floor(arr.length/2);
if(arr.length<=1) return arr;
let piovt = arr.splice(piovtIndex,1)[0];
let _left = []
let _right = []
for (var i = 0; i < arr.length; i++) {
let item = arr[i];
if(item<piovt) {
_left.push(item)
} else {
_right.push(item)
}
}
return quickSort(_left).concat([piovt],quickSort(_right))
}
复制代码
var _arr = []
for(let i=0;i<100000;i++) {
_arr.push(Math.ceil(Math.random()*100))
}
// console.log(_arr)
//快速排序
function quickSort(arr) {
let piovtIndex = Math.floor(arr.length/2);
if(arr.length<=1) return arr;
let piovt = arr.splice(piovtIndex,1)[0];
let _left = []
let _right = []
for (var i = 0; i < arr.length; i++) {
let item = arr[i];
if(item<piovt) {
_left.push(item)
} else {
_right.push(item)
}
}
return quickSort(_left).concat([piovt],quickSort(_right))
}
//交换数组元素
function swap(arr,n,n1) {
let temp = arr[n];
arr[n] = arr[n1];
arr[n1] = temp;
}
//冒泡排序
function bubbleSort(arr) {
for(let i=arr.length-1;i>=0;i--) {
for(let j=0;j<i;j++) {
if(arr[j]>arr[i]) {
swap(arr,j,i)
}
}
}
return arr;
}
//测试
let time1 = Date.now()
var a = bubbleSort(_arr)
// console.log(a)
console.log('冒泡排序用时:',Date.now()-time1);
let time2 = Date.now()
quickSort(_arr)
console.log('快速排序用时:',Date.now()-time2);
// 冒泡排序用时: 5373
// 快速排序用时: 533
复制代码
在数据量为10w时,结果输出为冒泡排序用时5373ms,快速排序用时533ms,二者性能相差10倍之多!github
最后附上个人博客地址,欢迎多多交流!算法