快速排序算法實現

#include <iostream>
#include <cstdlib>

using namespace std;

void quickSort(int *data, int length, int start, int end);

int main()
{
	
	int test[] = {4, 3, 6, 2, 9, 0};
	try
	{
		quickSort(test, 6, 0, 5);
	}
	catch(char *ch)
	{
		cout << ch << endl;
		return 1;
	}
	for (int i=0; i<6; i++)
		cout << test[i] << " ";
	cout << endl;
	return 0;
}

void swap(int* a, int* b)		//交換數據
{
	int temp = *a; 
	*a = *b;
	*b = temp;
}

int random(int start, int end)			//隨機數生成器
{
	return start+(end-start)*rand()/(RAND_MAX+ 1);
}

int partition(int *arr, int length, int start, int end)	//求得分界值
{
	if (arr==NULL || length<=0 || start<0 || end>=length)
		throw("Parameter error!");
	int index = random(start, end);
	if (index != end)
	{
		swap(&arr[index], &arr[end]);
	}
	int small = start-1;
	for (int i=start; i<end; i++)
	{
		if (arr[i] < arr[end])
		{
			small++;
			if (small != i)
			{
				swap(&arr[small], &arr[i]);
			}
		}
	}
	small++;
	swap(&arr[small], &arr[end]);

	return small;
}

void quickSort(int *data, int length, int start, int end)	//遞歸快速排序
{
	if (start == end)
		return;
	int index = partition(data, length, start, end);
	if (index > start)
	{
		quickSort(data, length, start, index-1);
	}
	if (index < end)
	{
		quickSort(data, length, index+1, end);
	}
}

發佈了42 篇原創文章 · 獲贊 57 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章