【数据结构】快速排序

hoare法

#define _CRT_SECURE_NO_WARNINGS
#include


void swap(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}


int Part_Sort(int* arr,int left,int right)
{
	int key = arr[left];//选取左边第一个为基准值
	int keyi = left;

	while (leftkey,
		//如果交换的话,则不符合快排思想。


		while (left < right && arr[right] >= key) right--;//只要right停下来,arr[right]不是小于key就是left和right相遇了;
		while (left < right && arr[left]  <= key) left++;//只要left停下来,arr[left]不是大于key就是left和right相遇了;
		if(left!=right)    swap(&arr[left], &arr[right]);       //left==right没必要交换
		

	}

	if (right!=keyi) swap(&arr[right],&arr[keyi]);//确认最后left确实移动了,即left!=keyi;
	return right;
}

//时间复杂度O(nlogn),空间复杂度O(1)
void Quick_Sort(int* arr, int left,int right)
{
	if (left >= right) return;
	int keyi = Part_Sort(arr, left, right);//返回值是left和right相遇的下标;

	//优化,三数取中;
	Quick_Sort(arr,left,keyi-1);
	Quick_Sort(arr,keyi+1,right);
}



int main()
{
	int array[10] = { 10,9,8,7,6,5,4,3,2,1 };
	Quick_Sort(array,0,9);
	for (auto& e : array)
	{
		std::cout << e << std::endl;
	}





	return 0;
}

你可能感兴趣的:(数据结构,数据结构)