1. 程式人生 > >JavaScript常用排序演算法總結

JavaScript常用排序演算法總結

(一)氣泡排序

原理:

         比較相鄰的元素,如果第一個比第二個大,就交換他們兩個;          對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對;          在這一點,最後的元素應該會是最大的數;          針對所有的元素重複以上的步驟,除了最後一個;          持續每次對越來越少的元素重複上面的步驟,          直到沒有任何一對數字需要比較。

function bubbleSort(arr){
	console.time('time:')
	var len = arr.length;
	for(var j = 0 ; j < len ; j++){//n個元素需要迴圈n次
		for(var k = 0 ; k < len - j - 1 ; k++ ){//每次找到的元素都會排到末尾,所以k每次都從0開始,外層迴圈每次可以找到一個正確的元素,所以內迴圈只需要 len-j 次,為了防止陣列越界,所以還要減一
			if(arr[k] > arr[k+1]){//順序不對,兩個元素交換
				var t = arr[k];
				arr[k] = arr[k+1];
				arr[k+1] = t;
			}
		}
	}
	console.timeEnd('time:');
	return arr;
}

(二)簡單選擇排序

原理:

         簡單選擇排序的基本思想:給定陣列:int[] arr={裡面n個數據};          第1趟排序,在待排序資料arr[1]~arr[n]中選出最小的資料,          將它與arrr[1]交換;第2趟,          在待排序資料arr[2]~arr[n]中選出最小的資料,將它與r[2]交換;          以此類推,第i趟在待排序資料arr[i]~arr[n]中選出最小的資料,          將它與r[i]交換,直到全部排序完成。

function selectionSort(arr){
	console.time('time:')
	var len = arr.length;
	for(var i = 0 ; i < len ; i++){//n個元素,就有n個位置,需要迴圈n次
		for(var j = i ; j < len ; j++){//選擇排序每次都會找到一個正確的元素放到前面,所以第二層索引從i開始,需要和剩下的所有的元素比較,所以 j < len 
			if(arr[i] > arr[j]){//i是待比較的位置,分別和未排序的所有元素比較,順序不對的就交換
				var t = arr[i];
				arr[i] = arr[j];
				arr[j] = t;
			}
		}
	}
	console.timeEnd('time:');
	return arr;
}