您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-17 20:38 429 查看
一个元素在一个序列中的名次是所有比它小的元素个数加上在它左边出现的与它相同的元素个数

例如:数组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
,将成绩按照名次进行排序,函数如下:
//按照名次排序
template <class T>
void reOrder(T a[], int n, int ra[])
{
T *u = new T
;//定义数组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]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 成绩排序