c++ 排序算法 快速排序 代码详解

参考:算法第四版

简介:

c++ 排序算法 快速排序 代码详解_第1张图片

代码:

#include
#include
using namespace std;
void Individual(int A[], int size)
{
	srand((unsigned)time(NULL));
	for (int i = 0; i < size; i++)
		A[i] = rand() % 100;
}
void Output(int A[], int size)
{
	cout << endl;
	for (int i = 0, j = 0; i < size; i++)
	{
		cout << A[i] << " ";
		j++;
		if (j == 10)
		{
			cout << endl;
			j = 0;
		}

	}
	cout << endl;
}
void swap(int A[], int i, int j)
{
	int t = A[i];
	A[i] = A[j];
	A[j] = t;
}

//快速排序
//1.先从数列中取出一个数作为基准数。
//2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
//3.再对左右子区间重复第二步,直到各区间只有一个数。
void QuickSort(int A[], int left, int right)   //left,right表示数组区间的下标
{
	//判断排序区间知否只剩1个数,是否递归执行完毕
	if (left < right)
	{
		//初始化数组左右指针i,j,基准值pivot = Array[left];     pivot:要填的坑
		int i = left, j = right, pivot = A[i];
		//使当i==j时左边的区间元素都小于基准值,右边的元素都大于基准值
		while (i < j)
		{
			//从右到左找第一个比基准值小的数A[j]
			while (i < j && pivot < A[j])
				j--;

			//判断i
			if (i < j)
				//把这个数A[j]放入A[i],i指针指向下一个元素
				A[i++] = A[j];

			//从左到右找第一个比基准值大的数A[i]
			while (i < j && pivot > A[i])
				i++;

			//判断i
			if (i < j)
				//把这个数A[j]放入A[i],j指针指向下一个元素
				A[j--] = A[i];
		}
		//基准值放中间
		A[i] = pivot;

		QuickSort(A, left, i - 1);
		QuickSort(A, i + 1, right);
	}
}
void Sort(int A[], int n)
{
	QuickSort(A, 0, n - 1);
}

int main()
{
	int n;
	cout << "请输入要排序的数组大小:" << endl;
	cin >> n;
	int* array = new int[n];
	Individual(array, n);

	Output(array, n);

	Sort(array, n);

	Output(array, n);

	delete[] array;
	return 0;
}

你可能感兴趣的:(c++经典排序算法)