快速排序的递归算法实现

用了这么多,感觉还是递归最简单最好用,下面介绍下递归实现快速排序,它在很多公司笔试题中也有考到

#include <stdio.h>


int FindSite(int *arr, int low, int high)
{
	int flag=arr[low]; //将需要查找位置的第一个数字赋值给flag;

	int *tmp = arr;
	while (low < high)//边界条件;
	{
		while ((low<high) && (tmp[high] >= flag))//当高位大于等于flag标志位时,应该将高位<<右移;
		{
			--high;//右移;
		}
		if (low < high)
		{
			tmp[low] = tmp[high];//当高位小于flag时,赋值给低位;
		}
		while ((low<high) && (tmp[low] <= flag))//当低位小于等于flag标志位时,应该将低位>>左移;
		{
			++low;//左移;
		}
		if (low < high)
		{
			tmp[high] = tmp[low];//当低位大于flag时,赋值给高位;
		}
	}
	tmp[low] = flag;//当low和high重合时,位置找到,将需要查找的数放进位置。
	return low;//将这个位置返回给排序函数;
}
 

void QuickSort(int *arr, int low, int high)
{
	int pow=0;//设置位置标志;
	if (low<high)
	{
		pow = FindSite(arr,low, high);//该位置将原来的线性数据分成两半;
		QuickSort(arr, low, pow-1);//再将左边的数据查找切分;
		QuickSort(arr, pow+1,high);//再将右边的数据查找切分;
	}
}
 
 

int main()
{
	int i = 0;
	int Array[] = { 79, 1, -3, 56, 22, 22, 7, 22, 4, 8, -1, 2 ,-1};
	printf("The original data is:\n");
	for (i = 0; i < sizeof(Array) / sizeof(int); i++)
	{
		printf("%d   ", Array[i]);
	}
	printf("\n");

	QuickSort(Array, 0, sizeof(Array) / sizeof(int)-1);

	printf("The number after reordering is:\n");
	for (i = 0; i < sizeof(Array) / sizeof(int); i++)
	{
		printf("%d   ", Array[i]);
	}
	printf("\n");

	return 0;
 
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值