2

我无法让它工作,似乎无论我做什么,它都无法正确排序。

我正在尝试根据点数按降序排序。

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;
    }
}
}
4

3 回答 3

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;
         }
    }
}
于 2013-03-29T19:39:22.400 回答
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;
        }
  }
}

它会根据您的需要按“降序”对您的所有记录进行排序

于 2013-03-29T19:41:37.663 回答
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);
}

尽量使用向量,它们已经针对性能和更好的内存使用进行了大量优化

于 2013-03-29T20:26:50.720 回答