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

C语言实现一趟快速排序算法,第1张

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;		//返回存放枢轴的最终位置
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5658684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存