数据结构学习 快速排序

数据结构学习 快速排序_第1张图片网上的图有点看不懂,所以按照自己的理解画了一个。 

平均时间复杂度:O(NlogN)
最佳时间复杂度:O(NlogN)
最差时间复杂度:O(N^2)
空间复杂度:根据实现方式的不同而不同

排序方式:In-place
稳定性:不稳定

写的时候踩了俩坑,好在还是发现了。

#include 
#include 

void QuickSort(int arr[], size_t l,size_t r)
{
	if (r == 0 || l >= r - 1)return;//size_t在进行加减操作千万要小心别爆了
					//如果没有r==0,当r为0时,r-1会变成2^32-1,大于l,会报错
	int key = arr[l], i = r - 1, j = l;
	while(i > j)
	{
		for (; i > j && arr[i] >= key; --i);//右指针 
		//不要漏等号,否则在碰到两个相等的数的时候会无限循环
		arr[j] = arr[i];
		for (; i > j && arr[j] <= key; ++j);//左指针
		arr[i] = arr[j];
	}
	arr[j] = key;//key归位
	//递归
	QuickSort(arr, l, i);//左边部分 快排
	QuickSort(arr, i + 1, r);//右边右边部分 快排
}

void Test_QuickSort1(void)
{
	int a[]{ 2,5,3,2,1,7,-1 };
	QuickSort(a, 0, sizeof(a) / sizeof(int));
	//for (int j = 0; j < 7; ++j)
	//{
	//	std::cout << a[j];
	//}
	//std::cout << std::endl;
}

 

 

你可能感兴趣的:(数据结构学习,数据结构,学习,算法)