C语言实现一趟快速排序算法

C语言实现一趟快速排序算法

题目:设计算法,完成一趟快速排序。即将下标从low到high的元素以r[low]为基准分成两部分,小的在前,大的在后。

算法思想:

设要排序的数组是r[ ],首先选取第一个元素,即r[low]作为基准数据,也就是枢轴,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。
具体过程为:
1)设置两个变量low、high分别指向第一个元素和最后一个元素;

2)每次都是将该数组第一个元素作为基准数据,赋值给pivot(枢轴),即pivot = r[low];

3)从high开始从后向前进行对比,当r[high] < pivot时,将r[high]赋值给r[low],然后再从low开始,从前往后进行对比,当r[low] > pivot时,将r[low]赋值给r[high],然后再从high开始从后向前对比,如此往复,知道low = high,此事就完成了一趟快速排序。

代码实现

// 一趟快速排序
int QuickSort (int r[], int low, int high) {
	int pivot = r[low];	//将第一个元素作为枢轴
	while (low < high) { //用low、high作为循环结束的判断标志,以搜索枢轴的最终位置
		while (low < high && r[high] >= pivot) //当high处的元素大于或等于枢轴
			--high;		//high向前移动,继续进行对比
		r[low] = r[high];	//当high处的元素小于枢轴,则该元素移动到左端,即low所处位置
		while (low < high && r[low] <= pivot)  //当low处的元素小于或等于枢轴
			++low;		//low向后移动,继续进行对比
		r[high] = r[low];	//当low处的元素大于枢轴,则该元素移动到右端,即high所处位置
	}
	r[low] = pivot;	//当循环结束时,low所处位置即为枢轴元素存放的最终位置
	return low;		//返回存放枢轴的最终位置
}
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值