快速排序

#include<iostream>

using namespace std;

int getMid(int data[], int start,  int end)
{
	int mid = (start + end) / 2;
	if (data[start] > data[mid])
	{
		if (data[mid] > data[end])
			return mid;
		else if (data[start] > data[end])
			return end;
		else
			return start;
	}
	else
	{
		if (data[mid] < data[end])
			return mid;
		else if (data[start] < data[end])
			return end;
		else 
			return start;
	}
}


int partition(int data[], int start, int end)
{
	int mid = getMid(data, start, end);
	int temp = data[mid];
	data[mid] = data[start];
	data[start] = temp;
	mid = start;

	int i = start + 1;
	int j = end;
	while (i < j)
	{
		if (data[i] < temp) ++i;
		if (data[j] > temp) --j;

		if (data[i] >= temp&&data[j] <= temp)
		{
			data[i] = data[i] + data[j];
			data[j] = data[i] - data[j];
			data[i] = data[i] - data[j];
			++i;
			--j;
		}
	}
	if (i = j)
	{
		temp = data[i];
		data[i] = data[start];
		data[start] = temp;
	}
	if (i > j)
	{
		--i;
		temp = data[i];
		data[i] = data[start];
		data[start] = temp;
	}
	return i;
}

void quickSort(int a[], int start, int end)
{
	if (start == end) return;
	int par = partition(a, start, end);
	if (par<start||par>end) return;
	quickSort(a, start, par - 1);
	quickSort(a, par + 1, end);
}
int main()
{
	int length = 0;
	while (cin >> length)
	{
		int*a = new int[length];
		for (int i = 0; i < length; ++i)
			cin >> a[i];
		quickSort(a, 0, length - 1);
		for (int j = 0; j < length; ++j)
		{
			if (j != length - 1)
			{
				cout << a[j] << " ";
			}
			else
			{
				cout << a[j];
			}
		}
	}
	system("pause");
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章