【Acwing430】

本文通过解决AcWing题库中的430.纪念品分组问题,探讨了快速排序算法在处理数据分组时的应用。作者指出冒泡排序效率低下,并介绍了快速排序的优势。同时,文章详细分析了在特定情况下,如何处理相同的元素导致的特殊分组情况,如‘abc’和‘ab’的例子。通过这个实例,读者可以理解如何处理数值误差和特殊情况,提高算法的健壮性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

430. 纪念品分组 - AcWing题库

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void turn(int *arr, int begin, int end);
int main()
{
	int max,sign=0,n;
	scanf("%d%d",&max,&n);
	int x[n],i=0;
	for (int i=0;i<n;i++)scanf("%d",&x[i]);
	Quick_Sort(x,0,n-1);
	int *a,*b,t=0;
	a=&x[0],b=&x[n-1];
	while (a-b!=1&&a!=b)
	{
		if (*a+*b<=max)
		{
			
			i++;
			a++;
			b--;
			sign=0;
			if (a==b)
				i+=1;
		}	
		else
		{
			i++;
			b--;
			sign=1;
		}
	}
	if (sign==0)
		printf("%d",i);
	else 
		printf("%d",i+1);
}
void turn(int *arr, int begin, int end)
{
	if(begin > end)
		return;
	int tmp = arr[begin];
	int i = begin;
	int j = end;
	while(i != j)
	{
		while(arr[j] >= tmp && j > i)
			j--;
		while(arr[i] <= tmp && j > i)
			i++;
		if(j > i)
		{
			int t = arr[i];
			arr[i] = arr[j];
			arr[j] = t;
		}
	}
	arr[begin] = arr[i];
	arr[i] = tmp;
	turn(arr, begin, i-1);
    turn(arr, i+1, end);
}


  
  
  
  
  
  
  

心得:

1.冒泡排序对于大量数据过于乏力,快速排序不错

2.数值错误就不要失心疯,万岁冲锋不值得提倡,考虑多种特殊情况,比如

    a b c    a与c能配对,此时b要单独一组(ab相同)

    a b       a与b不能配对(ab相同)

如上是一种情况的两种子情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值