C语言实现递归的快速排序

版权声明:本博客为个人原创,转载请注明出处 https://blog.csdn.net/qq_33826564/article/details/82847030

C语言实现递归的快速排序


目录


原理

  • 原理这里就不多阐述了,主要就是使用头尾两个指针,对待排序数组进行操作,递归的收敛返回条件是头尾两个指针重叠。注意这里在操作指针的之后(特别是对指针进行加减运算之后),或者在指针传入函数之前,必先检查指针是否越界。越界之后将造成不可预估的输出。

代码

#include<stdio.h>
#include<stdlib.h>

int sort(int * h, int *t)
{
	int *tempt = t;
	int *temph = h;
	int temp = 0;
	if (h==NULL||t==NULL)	return 0;
	else
	{
		if (h == t)	return 0;
		else
		{
			//判断头尾指针是否重合
			while (tempt!=temph)
			{
				//方向h->t
				if (*tempt<*temph)
				{
					temp = *tempt;
					*tempt = *temph;
					*temph = temp;
					temph++;
					//判断头尾指针是否重合
					while (temph!=tempt)
					{
						//方向h<-t
						if (*tempt<*temph)
						{
							temp = *tempt;
							*tempt = *temph;
							*temph = temp;
							tempt--;
							break;
						}
						else temph++;
					}
				}
				else tempt--;
			}

		}

	}
	//注意这里判断指针是否越界
	if (temph-1>=h)		sort(h, temph - 1);
	if (tempt+1<=t) 	sort(temph + 1, t);
	return 0;
}


int main()
{

	int a[] = { 3,5,2,7,1,8,4,9,6,0 };
	int len = sizeof(a) / sizeof(int);
	if (!sort(&a[0], &a[len-1]))
	for (int i = 0; i<len; i++)	printf(" %d ", a[i]);
	else printf("error\n");
	printf("\n");

	getchar();

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_33826564/article/details/82847030