如何正确使用选择排序算法对列表进行排序?

时间:2013-03-29 19:32:07

标签: c++ arrays algorithm sorting selection

我无法让它发挥作用,看起来就像我做的那样它从来没有正确排序。

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

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

3 个答案:

答案 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);
}

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