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位不正确。。。我想那是另一个使用结构的草稿?@没用是的,我很粗心,我指的是一个结构数组。谢谢