按照分数进行名次计算、名次排序

一个元素在一个序列中的名次是所有比它小的元素个数加上在它左边出现的与它相同的元素个数

例如:数组a=[4,2,9,2,6]是一个序列,各元素的名次为ra=[2,0,4,1,3]。

//名次计算
template<class T>
void rank(T a[], int n, int ra[])
{
	//给数组a的n个元素排名次结果在ra中返回
	for (int 1 = 0; i < n; i++)
	{
		ra[i] = 0;//初始化
	}
	//比较所有元素
	for (int i = 1; i < n; i++)
	{
		for (int j = 0; j < i; j++)
		{
			if (a[j] <= a[i])
				ra[i]++;
			else
				ra[j]++;
		}		
	}
}
利用名次计算后的结果ra[n],将成绩按照名次进行排序,函数如下:

//按照名次排序
template <class T>
void reOrder(T a[], int n, int ra[])
{
	T *u = new T[n];//定义数组u,将元素排序
	//把a中的元素添加在u中
	for (int i = 0; i < n; i++)
	{
		u[ra[i]] = u[i];
	}
	//吧u中的数据复制给a
	for (int i = 0; i < n; i++)
	{
		a[i] = u[i];
	}
}

在这回顾一下选择排序和冒泡排序的方法,程序分别如下:

//选择排序
template <class T>
viod selectSort(T a[], int n)
{
	for (int k = 0; k < n; k++)
	{
		int recordMaxIndex = 0;
		for (int i = 0; i < n-k; i++)
		{
			if (a[i]>a[recordMaxIndex])
				recordMaxIndex = i;
		}
		swap(a[n-k-1], a[recordMaxIndex]);
	}
}

//冒泡排序
template<class T>
void bubbleSrot(T a[], int n)
{
	for (int i = n; i > 1; i--)
	{
		for (int k = 0; k < i - 1; k++)
		{
			if (a[k]>a[k + 1])
				swap(a[k], a[k + 1]);
		}
	}
}



  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值