新手学习数据结构与算法---快速排序算法

嗯,这个算法确实不错!

快速排序算法:

平均时间复杂度:O(nlog2n)

最坏时间复杂度:O(n^2)

欢迎大家给出建议:

//快速排序算法
#include 

#define MAX 10

int Partition(int arr[], int left, int right)    //选一个数,这个数左边的为小于它的,右边为大于它的
{
	int low, high, x;
	low = left;
	high = right;
	x = arr[left];                       //x选取第一个数,将其与其他数进行比较
	while(low < high)
	{
		while(arr[high] >= x && (low < high))    //先从右边开始遍历数
			high--;
		if(low < high)
		{
			arr[low] = arr[high];
			low++;
		} 
		while(arr[low] <= x && (low < high))    //开始从左边开始遍历
			low++;
		if(low < high) 
		{
			arr[high] = arr[low];
			high--;
		}                 
	} 
	arr[low] = x;             //将中间数放在low = high 的位置
	return low;                //返回中间数的位置 
} 


//进行递归排序
void RecursionQuickSort(int arr[], int low, int high)
{
	int mid;
	if(low < high)
	{
		mid = Partition(arr, low, high);     //得到中间数
		RecursionQuickSort(arr, low, mid - 1);        //递归开始。。。
		RecursionQuickSort(arr, mid + 1, high);   //中间的那个数不变 
	}
} 


int main()
{
	int i;
	int arr[MAX] = {50, 45, 23, 45, 56, 74, 78, 89, 45, 56};
	RecursionQuickSort(arr, 0, MAX - 1);
	
	for(i = 0; i < MAX; i++)     
 		printf("%d ", arr[i]);
	printf("\n");
	return 0; 
}


 

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