常用排序算法2--归并排序和快速排序

function ArrayList() {
	var arr = [];

	this.insert = function (value) {
		arr.push(value);
	}

	this.toString = function () {
		return arr.join(" ");
	}

	/*归并排序*/
	this.mergeSort = function () {
		arr = mergeSortRec(arr);
		return this;
	}

	function mergeSortRec(arr) {
		var len = arr.length;
		if(len == 1) {
			return arr;
		}

		var mid = Math.floor(len / 2),
			left = arr.slice(0, mid),
			right = arr.slice(mid, len);

		return merge(mergeSortRec(left), mergeSortRec(right));
	}

	function merge(left, right) {
		var result = [],
			il = 0,
			ir = 0;

		while(il < left.length && ir<right.length) {
			if(left[il] < right[ir]) {
				result.push(left[il]);
				il++;
			} else {
				result.push(right[ir]);
				ir++;
			}
		}

		while(il < left.length) {
			result.push(left[il]);
			il++;
		}

		while(ir < right.length) {
			result.push(right[ir]);
			ir++;
		}

		return result;

	}

	/*快速排序*/
	this.quickSort = function () {
		quick(arr, 0, arr.length-1);
		return this;
	}

	function quick(arr, left, right) {
		var index;
		if(arr.length > 1) {
			index = partition(arr, left, right);

			if(left < index -1) {
				quick(arr, left, index - 1);
			}

			if(index < right) {
				quick(arr, index, right);
			}
		}
	}

	function partition(arr, left, right) {
		var pivot = arr[Math.floor((right + left) / 2)],
			i = left,
			j = right;

		while(i <= j) {
			while(arr[i] < pivot) {
				i++;
			}

			while(arr[j] > pivot) {
				j--;
			}

			if(i <= j) {
				swapQuickSort(arr, i, j);
				i++;
				j--;
			} 
		}
		return i;
	}

	function swapQuickSort(arr, index1, index2) {
		var temp = arr[index1];
		arr[index1] = arr[index2];
		arr[index2] = temp;
	}
}


function test() {
	//          0  1  2  3  4   5
	// len = 6
	var arr = [10, 2, 3, 7, 20, 4];
	var arr_list = new ArrayList();
	for(var i=0; i<arr.length; ++i) {
		arr_list.insert(arr[i])
	}

	console.log("arr_list = ", arr_list.toString());
	//console.log("arr_list.mergeSort = ", arr_list.mergeSort().toString());
	console.log("arr_list.quickSort = ", arr_list.quickSort().toString());
}

test();

猜你喜欢

转载自blog.csdn.net/qq_21058391/article/details/78358539