栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

快速排序算法(数据结构)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

快速排序算法(数据结构)

图中为快速排序的一个基本实现过程


#include"stdio.h"
#define MAX 10
int Array[MAX] = { 49,38,65,97,76,13,27,90 };  //定义一个需要排序的数组

void Quick_Sort(int* arr, int low, int high)
{
	if (low < high)
	{
		int i = low;
		int j = high;
		int key = arr[low];  //选定排序的参考元素
		while (i < j)  //对高位和低位进行大小比较
		{
			while (i < j && arr[j] >= key)  //key后的元素大于key时不对元素处理,继续往低位移
			{
				j--;
			}
			//key后的元素小于key时
			if (i < j)
			{
				arr[i++] = arr[j];  //将元素存到key前
			}
			while (i < j && arr[i] < key)  //key前的元素小于key时不对元素处理,继续往高位移
			{
				i++;
			}
			//key前的元素大于key时
			if (i < j)
			{
				arr[j--] = arr[i];  //将元素存到key后
			}
		}
		arr[i] = key;
		Quick_Sort(arr, low, i - 1);  //对key前的数据进行递归排序
		Quick_Sort(arr, i + 1, high);  //对key后的数据进行递归排序
	}
}

void Print(int* p)  //输出数组
{
	for (p = Array; *p != NULL; p++)
		printf("%d ", *p);
}

void main()
{
	printf("排序前的数组:");
	Print(Array);

	Quick_Sort(Array, 0, 7);
	printf("n排序后的数组:");
	Print(Array);
}

大概对以上程序做一个大概的讲解:

以(int *arr,int low, int high)作为形参的Quick_Sort函数,参数中*arr表示指针指向数组的首地址,low表示最低位,high最高位。在进入函数体后,首先对low和high的值做判断,低位的值小于高位则往后进行,然后用变量 i 保存数组的最低位,用 j 保存数组最高位,key保存数组的第一位数据,即选定排序的参考对象,通过while( i < j )来判断是否可以进入循环,进入循环后,当数组中由高位到低位依次进行数组中元素的选取,并与前面所选取的参考对象进行比较,若选取的元素比参考对象大,则不对元素处理,若比参考对象小,则把元素保存到参考对象前面,直到j移到参考对象的位置上则不再进行保存。然后依次从低位往高位选取元素来与参考对象做比较,若选取的元素比参考对象小,则不对元素做处理,若比参考对象大,则把元素存储到参考对象之后,这样就实现了第一次快速排序,参考对象左侧和右侧的元素也是依照上述规则来排序的,只是排序的个数不一样,排序的深度有所不同,但原理都是一样的,因此依照上述方法进行函数的递归调用,对参考对象左右的元素再次进行快速排序,从而得到排序正确的数组。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983686.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号