快速排序以及输出展示

枢轴我都用   |数字| 标出了,可以看出整个数组排序的过程

int Partition(int *L,int low,int high)
{
	int p=L[low];   //枢轴选取第一个即low
	while(low<high)      //low>=high时说明排序完毕,必须退出
	{
		//下面的2个while都必须记得加low<high的判断
		while(low<high && L[high]>=p) high--;  //当枢轴右边值大于枢轴时,则high减小,看下一个值
		L[low]=L[high];  //发现一个小的,则换到low处,接着low开始加
		while(low<high&&L[low]<=p) low++;   //左边小于枢轴,则low++,继续看下一个值
		L[high]=L[low];    //发现一个大的,则换到刚才停住的high处,接着开始走high
	}

	L[low]=p;  //low==high时退出到此,那个位置就是枢轴应该呆的位置,故L[low]=p
	return low;//返回枢轴位置
}

void Qsort(int *L,int low,int high)
{
	int p;
	if(low>=high)   // 这个必须加!
		return ;
	p=Partition(L,low,high);  //排序并寻找枢轴位置
	Qsort(L,low,p-1);   //对枢轴左边排序
	Qsort(L,p+1,high);  //对枢轴右边排序
}



int main()
{
	int num[8]={6,8,4,9,3,5,2,7};
	Qsort(num,0,7);
	for(int i=0;i<=7;i++)
		printf("%d ",num[i]);
	cout<<endl;
}
快速排序算法(C语言版) #include <stdio.h> #include "type.h" #define Q_SIZE 10 /************************************* 模块内部数组或变量定义 **************************************/ static UINT8 q_array[Q_SIZE] = {0}; //static UINT8 m_array_tmp[M_SIZE] = {0}; /* 辅助数组,存放排序的中间结果 */ /************************************* 函数定义 **************************************/ /******************************************************************************************* 函数名:UINT8 splt( UINT8 * m_ptr, UINT8 q_low, UINT8 q_high, UINT8 q_pos ) 入口参数列表:m_ptr, q_pos 入口参数描述:数组的地址,数组的首元素和尾元素位置,指向主元位置的指针 返回值描述:无 函数功能:使数组经过排列后小于或等于x的元素在x前面,x在大于它的元素前面(x = q_array[*q_pos]) ********************************************************************************************/ UINT8 splt( UINT8 * q_ptr, SINT8 q_low, SINT8 q_high ) { UINT8 x = 0; SINT8 i = 0; SINT8 j = 0; UINT8 q_tmp = 0; i = q_low; x = q_ptr[q_low]; for (j = q_low + 1; j <= q_high; j++) { if (q_ptr[j] <= x) { i++; if (i != j) { q_tmp = q_ptr[i]; q_ptr[i] = q_ptr[j]; q_ptr[j] = q_tmp; } } } q_tmp = q_ptr[i]; q_ptr[i] = q_ptr[q_low]; q_ptr[q_low] = q_tmp; return i; } /******************************************************************************************* 函数名:void quicksort( UINT8 * m_ptr, UINT8 m_low, UINT8 m_high ) 入口参数列表:m_ptr, m_low, m_high 入口参数描述:数组的地址,数组的首元素和尾元素的索引 返回值描述:无 函数功能:对数组进行排序,产生非降序的数组 ********************************************************************************************/ void quicksort( UINT8 * q_ptr, SINT8 q_low, SINT8 q_high ) { UINT8 q_w; if (q_low < q_high) { q_w = splt(q_ptr, q_low, q_high); quicksort(q_ptr, q_low, q_w - 1); quicksort(q_ptr, q_w + 1, q_high); } } /****************************************************************************** 函数名:main( void ) 入口参数列表:无 入口参数描述:无 返回值描述:无 函数功能:主函数,用于测试 *******************************************************************************/ void main( void ) { UINT8 i, q_num = 0; printf("请输入10个2位整数:\n"); for (i = 0; i < Q_SIZE; i++) { scanf("%d", &q_num); q_array[i] = q_num; } quicksort(q_array, 0, 9); for (i = 0; i < Q_SIZE; i++) { printf("%d ", q_array[i]); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值