排序算法之快速排序

#include <iostream>

using namespace std;

//快速排序

/**
一句箴言:若是要排序數組中下標從 l 到 r 之間的一組數據,咱們選擇 l 到 r 之間的任意一個數據[通常選擇第一個]做爲 pivot(分區點)。

方法:分區是關鍵,選定第一個爲分區值,以j爲最終分區位置索引,遍歷值,若小於分區值,則j索引向後移動,並交換值 

**/


int _partition(int arr[], int l ,int r){
	int temp = arr[l];
	int j = l;
	for(int i = l + 1 ; i<=r; i++){
		if (arr[i] < temp){
			j++;
			swap(arr[j],arr[i]);
		}
	} 
	swap(arr[l], arr[j]);
	return j;
}

void quickSort(int arr[], int l, int r) {
	if (l >= r) {
		return;
	}
	int p = _partition(arr, l ,r);//獲取分區點 
	quickSort(arr, l, p-1);
	quickSort(arr, p+1, r);
}


int main() {

	int arr[10] = {10,9,8,7,13,5,4,3,2,1};

	quickSort(arr, 0, 10 -1);

	for(int i =0; i< 10; i++) {
		cout << arr[i] << "  ";
	}

	return 0;
}
相關文章
相關標籤/搜索