编程题

int GetNumber(char* pString)
{
	if (NULL == pString)
	{
		throw new exception("the input is illegal");
	}

	int length = 0;
	char* pStr = pString;
	while (*pStr != '\0')
	{
		if (*pStr >= 'A'&&*pStr <= 'Z')
		{
			++length;
			++pStr;
		}
		else
			throw new exception("The character should between A~Z");
	}		
	int number = 0;
	pStr = pString;
	for (int i = 0; i < length; ++i)
	{
		number = number*(int)pow(26,i) + (*(pStr + i) - 'A' + 1);
	}
	return number;
}

堆排序:

#include <iostream>
using namespace std;

void MinHeapFixdown(int* a,int i,int n)
{
	int temp=a[i];
	int j=2*i+1;
	while (j<n)
	{
		if (j+1<n&&a[j+1]<a[j])
			j++;
		if (a[j]>=temp)
			break;
		a[i]=a[j];
		i=j;
		j=2*i+1;
	}
	a[i]=temp;
}

void MakeMinHeap(int* a,int n)
{
	for (int i=n/2-1;i>=0;i--)
	{
		MinHeapFixdown(a,i,n);
	}
}

void MinHeapSort(int* a,int n)
{
	MakeMinHeap(a,n);
	for (int i=n-1;i>=1;i--)
	{
		swap(a[0],a[i]);
		MinHeapFixdown(a,0,i);
	}
}

void main()
{
	int a[]={5,1,3,9,7,6,8,11,0};	
	MinHeapSort(a,9);
	for (auto i:a)
	{
		cout<<i<<" ";
	}
	cout<<endl;	
	system("pause");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值