快速排序(C語言)

思想

分治法,交換

過程

從數列中取出一個數作爲基準數
將比這個數大的數全放在他的右邊,小於或等於它的數全放在他的左邊
再對左右區間重複第二步,直到各區間只有一個數。

代碼(C)

兩種實現思路: 交換法(基準不動), 挖坑填數法

//交換法實現的quicksort
void quicksort(int arr[], int left, int right)
{
	if (left >= right)//注意要寫這個遞歸跳出的條件
		return;
	int i = left;
	int j = right;
	int key = arr[left];
	while (i < j){
		while(i < j && arr[j] >= key)
			j--;
		while(i < j && arr[i] <= key)
			i++;
		if (i < j)
			swap(&arr[i], &arr[j]);
	}
	swap(&arr[left], &arr[i]);
	quicksort(arr, left, i-1);
	quicksort(arr, i+1, right);
}
//挖坑填數法實現的quicksort
void quicksort(int arr[], int left, int right)
{
	if (left >= right)
		return;
	int i = left;
	int j = right;
	int key = arr[left];
	while (i < j){
		while (arr[j] >= key && i < j)
			j--;
		arr[i] = arr[j];
		while (arr[i] <= key && i < j)
			i++;
		arr[j] = arr[i];
	}
	arr[i] = key;
	quicksort(arr, left, i-1);
	quicksort(arr, i+1, right);
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章