面試指南-Javascript排序

開篇

排序是咱們平常開發中很是經常使用的一種操做。目前最經典的排序算法有十種,分別是:冒泡排序、選擇排序、插入排序、希爾排序、歸併排序、快速排序、堆排序、計數排序、桶排序。下面咱們介紹兩種最經常使用的排序算法:冒泡排序和快速排序。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


最後附上個人博客地址,歡迎多多交流!算法

相關文章
相關標籤/搜索