快排 QUICKSORT

/*
分为4个区段
p<= k <= i,  arr[k] <= x
i+1<= k <= j-1, arr[k] > x
j< k < r, 待扫描
k = r, arr[k] = x
*/
function partition(arr, p, r){
	var i = p - 1,
		j = p,
		x = arr[r];
	while(j < r){
		if(arr[j] <= x){
			i = i + 1;
			swap(arr, i, j);
		}
		j = j + 1;
	}
	swap(arr, r, i + 1);
	return i + 1;
}


function quicksort(arr, p, r){
	if(p<r){
		var q = partition(arr, p, r);
		quicksort(arr, p, q-1);
		quicksort(arr, q+1, r);
	}
}

function test(){
	var arr = [8,9,6,3,5,11,16,2];
	quicksort(arr, 0, arr.length-1);
	print(arr);
	
	arr = [6,6,6,6,6,6,6,6];
	quicksort(arr, 0, arr.length-1);
	print(arr);
	
	arr = [1,2,3,4,5,6,7,8];
	quicksort(arr, 0, arr.length-1);
	print(arr);
	
	arr = [8,7,6,5,4,3,2,1];
	quicksort(arr, 0, arr.length-1);
	print(arr);
}

function print(arr){
	var str = "";
	arr.forEach(function(n, i){
		str += " " + n;
	});
	console.log(str);
}

function swap(arr, i, j){
	var temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
}

  

posted @ 2018-11-29 09:34  chenyizh  阅读(70)  评论(0)    收藏  举报