1. 程式人生 > >Js氣泡排序與快速排序

Js氣泡排序與快速排序

var array = [7, 8, 6, 12, 87, 35, 1, 48, 56, 12, 48, 69, 12, 12, 12, 103, 15, 6, 88, 24, 26, 25, 9, 6];

//氣泡排序
function bubbleSort(arr){
	var len = arr.length;
	for(var i=0; i<len; i++){
		var len_j = len - i - 1;
		for(var j=0; j<len_j; j++){
			if(arr[j] > arr[j+1]){
				arr[j] = arr[j] ^ arr[j+1];
				arr[j+1] = arr[j] ^ arr[j+1];
				arr[j] = arr[j] ^ arr[j+1];
			}
		}
	}
}
bubbleSort(array);
console.log(array);	//[1, 6, 6, 6, 7, 8, 9, 12, 12, 12, 12, 12, 15, 24, 25, 26, 35, 48, 48, 56, 69, 87, 88, 103]

//快速排序
function quickSort(arr, low, high){
	var staticHigh = high,	//獲取最初始高位指標
		val = arr[low],		//把低位當做關鍵字
		index = low;		//關鍵字下標
	if(low >= high){
		return;
	}
	while(low < high){
		//如果與關鍵字相同的,按比關鍵字大來排序
		while(val <= arr[high]){
			if(index != high){	//為避免匹配到本身時,錯誤的把高位下標減1,跳過迴圈
				high--;
			}else{
				break;
			}
		}
		//關鍵字與高位換位置
		arr[index] = arr[high];
		arr[high] = val;
		index = high;
		
		while(arr[low] < val){
			low++;
		}
		//關鍵字與低位換位置
		arr[index] = arr[low];
		arr[low] = val;
		index = low;
	}
	quickSort(arr, 0, index-1);	//遞迴前半段
	quickSort(arr, index+1, staticHigh);	//遞迴後半段
}
quickSort(array, 0, array.length-1);
console.log(array);	//[1, 6, 6, 6, 7, 8, 9, 12, 12, 12, 12, 12, 15, 24, 25, 26, 35, 48, 48, 56, 69, 87, 88, 103]