Skip to content

Files

Latest commit

 

History

History
101 lines (70 loc) · 2.18 KB

6.FastSort.md

File metadata and controls

101 lines (70 loc) · 2.18 KB

快速排序

快速排序使用的分治策略进行排序。快速排序像是冒泡排序上添加了递归分治。

1.算法步骤

  1. 从数列中挑出一个元素,称为“基准(pivot)”
  2. 重新排序数组,所有元素笔基准小的放在基准前面,所有元素笔基准值大的放在基准后面。(相同的值可以放任意一遍)
  3. 递归把小于基准和大于基准的子数组排序。

2.算法演示流程

Bubbling Sort (对应方式1) Bubbling Sort (对应方式2)

3.算法代码

// -------------------------------方式1---------------------------------

	function fastSort(arr, left, right){

		var len = arr.length;
		var partitionIndex;   // 分割的位置

		var left = typeof left != "number" ? 0 : left;
		var right = typeof right != "number" ? len - 1 : right;
		if (left < right) {
			partitionIndex = partArrAction(arr, left, right);
			fastSort(arr, left, partitionIndex - 1);
			fastSort(arr, partitionIndex + 1, right);
		}
		
	}
// 
	function partArrAction(arr, left, right){
		var povit = left;
		var index = povit + 1;

		for(var i = index; i < right; i++){
			if (arr[i] < arr[povit]) {
				swap(arr, i, index);
				index++;
			}
		}

		swap(arr, index - 1, povit);

		return index - 1;

	}

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



	// -----------------------------------方式2--------------------------------
	function quickSort(arr, low, hight){
		var povitIndex;   // 分割的位置

		if (low < hight) {
			povitIndex = partitionAction(arr, low, hight);
			quickSort(arr, low, povitIndex - 1);
			quickSort(arr, povitIndex + 1, hight);
		}
		return arr;
	}



	function partitionAction(arr, low, hight){
		var povit = arr[low];
		while(low < hight){
			while(low < hight && arr[hight] > povit){
				--hight;
			}

			arr[low] = arr[hight];
			while(low < hight && arr[low] <= povit){
				++low;
			}
			arr[hight] = arr[low];
		}
		arr[low] = povit;
		return low;
	}