华为一道上机题(算法类别:其它)

实现一个函数,函数功能如下:

输入一个无序正整数数组,输出一个有序数组,并且如果数组中有连续的数字如1,2,3,4,7,8,12,15。则对于连续的数字只输出其第一个和最后一个:1,4,7,8,12,15.

完成函数 void ChangArr(int *pIn,int inLength,int *pOut,int outLength)

void QuickSort(int *arr,int low,int high)
{
	int i=low,j=high;
	int temp=arr[low];
	if(i<j)
	{while(i<j){
		while(i<j && temp<arr[j])j--;
		if(i<j){arr[i]=arr[j];i++;}
		while(i<j && temp>=arr[i])i++;
		if(i<j){arr[j]=arr[i];j--;}
		}
	
arr[i] = temp;
QuickSort(arr,low,i-1);
QuickSort(arr,i+1,high);
	}

}

void ChangArr(int*pIn ,int inLength,int *pOut,int outLength)
{
	int *tempArr = new int[inLength];
	for(int i=0;i<inLength;i++)
	{
		tempArr[i] = pIn[i];
	}

	QuickSort(tempArr,0,9);

	for(int i=0;i<inLength;i++)
	{
		cout<<tempArr[i]<<"  ";
	}

	cout<<endl;
	int flag = 0;
	int m = 0;
    pOut[0] = tempArr[0];
	for(int i = 1;i<inLength;i++)
	{
		if(tempArr[i] == (tempArr[i-1]+1))
		{
			flag++;
		}
		else
		{
			flag=0;
		}
		if(flag<2)
		{
			m++;
		}
			pOut[m]=tempArr[i];
			
	}
	for(int i=m+1;i<inLength;i++)
	{
		pOut[i] = -1;
	}
	delete []tempArr;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值