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

C++ 如何正确使用选择排序算法对列表进行排序?,c++,arrays,algorithm,sorting,selection,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 中间一列是点数 Bryan_Bickell 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
中间一列是点数

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

应该是这样的

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

应该是这样的

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

如果只有中间列用于排序,即用于对记录排序的键,则不需要4个数组来存储这些记录。据我所知,您正在尝试使用选择排序根据点数对这些记录进行排序。代码应该如下所示:假设记录是您的记录数组

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

它将按照您的需要按降序对所有记录进行排序

如果只使用中间列进行排序,则不需要4个数组来存储这些记录,即用于对记录进行排序的键。据我所知,您正在尝试使用选择排序根据点数对这些记录进行排序。代码应该如下所示:假设记录是您的记录数组

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

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

将数据存储到std::vector中,然后对其进行排序怎么样

int compare(int a, int b){
 return (a>b);
}

void sort(std::vector<int> &data){
 std::sort(data.begin(), data.end(), compare);
}

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

如何将数据存储到std::vector中,然后对其进行排序

int compare(int a, int b){
 return (a>b);
}

void sort(std::vector<int> &data){
 std::sort(data.begin(), data.end(), compare);
}

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

我想你需要修正你的想法…选择排序处理的是在每次迭代中找到最小值…你没有设置任何最小值…请参考你的交换有问题;请注意,变量temp从未设置。另外,您的代码看起来像是冒泡排序的一部分,而不是选择排序使用std::swap。。。交换点数[i],点数[i+1];如果您有4个并行阵列,那么交换代码需要在所有4个阵列上并行工作。你最好用一组结构做得更好;大概你还没有涉及到这一点。我想首先得到排序来排序点,然后在函数关闭后处理所有4个数组将是轻而易举的事。我想你需要修改你的想法…选择排序处理的是在每次迭代中找到最小值…你没有设置任何最小值…请参考你的交换是错误的;请注意,变量temp从未设置。另外,您的代码看起来像是冒泡排序的一部分,而不是选择排序使用std::swap。。。交换点数[i],点数[i+1];如果您有4个并行阵列,那么交换代码需要在所有4个阵列上并行工作。你最好用一组结构做得更好;大概你还没有讨论过。我想先得到排序来排序点,然后在函数关闭后处理所有4个数组将是轻而易举的事。a将是你需要的数组。我不应该是jcall是这样的……fori=0;ia将是您所需的阵列我不应该是jcall是这样的…因为i=0;iNB。如果使用int记录[],.point位不正确。。。我想那是另一个使用结构的草稿?@没用是的,我很粗心,我指的是一个结构数组。谢谢注意。如果使用int记录[],.point位不正确。。。我想那是另一个使用结构的草稿?@没用是的,我很粗心,我指的是一个结构数组。谢谢