我无法让它发挥作用,看起来就像我做的那样它从来没有正确排序。
我正在尝试根据点数按降序排序。
Bryan_Bickell 2 5 +2
Brandon_Bolig 0 3 0
Dave_Bolland 4 2 -1
Sheldon_Brookbank 0 4 -1
Daniel_Carcillo 0 1 +3
中间栏是点数。
我使用4个数组存储所有这些值,我如何正确利用数组选择排序以正确的方式对其进行排序?
我已经尝试了下面的所有答案,但它们似乎都没有用,这是我到目前为止所做的
void sortArrays( string playerNames[], int goals[], int assists[], int rating[], int numPlayers )
{
int temp, imin;
int points[numPlayers];
for(int j = 0; j < numPlayers; j++)
{
points[j] = goals[j] + assists[j];
}
imin = points[0];
for(int i = 0; i < numPlayers; i++)
{
if (points[i] < imin)
{
imin = points[i];
}
}
for(int j = 1; j < numPlayers; j++)
{
if (points[j] > imin)
{
temp = points[j];
points[j] = points[j-1];
points[j-1] = temp;
}
}
}
答案 0 :(得分:3)
它应该是这样的......
void selsort(int *a,int size)
{
int i,j,imin,temp;
//cnt++;
for(j=0;j<size;j++)
{
//cnt+=2;
imin=j;
for(i=j+1;i<size;i++)
{
//cnt+=2;
if(a[i]<a[imin])
{
//cnt++;
imin=i;
}
}
if(imin!=j)
{
//cnt+=3;
temp=a[j];
a[j]=a[imin];
a[imin]=temp;
}
}
}
答案 1 :(得分:1)
如果仅使用中间列进行排序(即用于对记录进行排序的键),则不需要4个数组来存储这些记录。根据我的理解,您正在尝试根据选择排序的点数对这些人的记录进行排序。代码应如下所示:假设records
是您的记录数组
void selectionSort(RECORD records[], int n) {
int i, j, minIndex, tmp;
for (i = 0; i < n - 1; i++) {
maxIndex = i;
for (j = i + 1; j < n; j++) //find the current max
{
if (records[j].point > records[minIndex].point)
{
//assume point is the number of point, middle column
minIndex = j;
}
}
//put current max point record at correct position
if (minIndex != i) {
tmp = records[i];
records[i] = records[minIndex];
records[minIndex] = tmp;
}
}
}
它会根据您的需要以“降序”对您的所有记录进行排序
答案 2 :(得分:0)
如何将数据存储到std :: vector然后对其进行排序
int compare(int a, int b){
return (a>b);
}
void sort(std::vector<int> &data){
std::sort(data.begin(), data.end(), compare);
}
尝试尽可能多地使用向量,它们已针对性能和更好的内存使用进行了大量优化