1. 程式人生 > >C語言快速排序原始碼

C語言快速排序原始碼

首先上原始碼:

#include <stdio.h>
#include <stdlib.h>
#define NUM 20

int partition(int arr[], int low, int high) {
	int key = arr[low];//選擇中樞數
	while (low < high) {
		//從陣列高位向低位移動,把小於中樞數的高位數放在低位
		while (low < high&&arr[high] >= key) {
			high--;
		}
		if (low < high) {
			arr[low] = arr[high];
			low++;
		}
		//從陣列的低位向高位移動,把大於中樞數的高位數放在高位
		while (low < high&&arr[low] <= key) {
			low++;
		}
		if (low < high) {
			arr[high] = arr[low];
			high--;
		}
	}
	//把中樞數放在高低數的中間
	arr[low] = key;
	return low;
}

void quick_sort(int arr[], int start, int end) {
	int pos;
	if (start < end) {
		//第一次劃分好高低數
		pos = partition(arr, start, end);
		//分別對高低數部分進行遞迴排序
		quick_sort(arr, start, pos - 1);
		quick_sort(arr, pos + 1, end);
	}
}

int main(void) {
	int i = 0;
	int arr[NUM] = { 50,12,67,43,100,78,34,1,67,50,
		89,34,55,78,47.89,0,109,34,34 };//排序的陣列

	printf("排序前:");
	for (i = 0; i < NUM; i++)
		printf("%d, ", arr[i]);
	
	quick_sort(arr, 0, NUM - 1);

	printf("\n排序後:");
	for (i = 0; i < NUM; i++) 
		printf("%d, ", arr[i]);
	printf("\n");

	system("pause");
	return 0;
}

執行結果:

至於具體的排序過程,我就不畫圖了,建議使用除錯功能監視陣列中資料的變化,畢竟做為一個學程式的人,連除錯程式都不會就很尷尬了,下面是除錯流程。

設斷點,執行到斷點處:

對陣列和變數進行監視: