我正在尝试按降序对数组中的十个值进行排序,但似乎无法正确处理。
我已经尝试过两次将代码复制到我的书中,甚至从youtube复制了代码,但仍然无法正常工作。有人请帮助我!我已经尝试了一切,这吓到我了。
void selectionSort(int list[], int size)
{
//Display variables
int minIndex, minValue, num;
//Calculate the array in descending order
for(int index = 0; index < size; index++)
{
minValue = list[index];
minIndex = index;
for(int index2; index2 < size; index2++)
{
if(list[index2] < minValue)
{
minValue = list[index2];
minIndex = index2;
}
}
swap(list[index], list[minIndex]); //function call
}
//Display the array in descending order
cout<<"The scores in descending order are ";
for(int num = 0; num < size; num++)
{
cout<<list[num]<<" ";
}
cout<<endl;
当我运行程序时,算法不会对任何内容进行排序,它会显示相同的精确数组而没有任何变化。
答案 0 :(得分:0)
在 selectionSort
中for(int index2 ; index2 < size; index2++)
必须
for(int index2 = index+1; index2 < size; index2++)
否则,当将其用作 list 的索引时,它尚未初始化且行为未定义。
之后:
#include <iostream>
using namespace std;
void selectionSort(int list[], int size)
{
//Display variables
int minIndex, minValue, num;
//Calculate the array in descending order
for(int index = 0; index < size; index++)
{
minValue = list[index];
minIndex = index;
for(int index2 = index+1; index2 < size; index2++)
{
if(list[index2] < minValue)
{
minValue = list[index2];
minIndex = index2;
}
}
swap(list[index], list[minIndex]); //function call
}
//Display the array in descending order
cout<<"The scores in descending order are ";
for(int num = 0; num < size; num++)
{
cout<<list[num]<<" ";
}
cout<<endl;
}
int main()
{
int v[] = { 1,8,6,9,0,2,3};
selectionSort(v, (int) (sizeof(v)/sizeof(int)));
return 0;
}
编译与执行
pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra c.cc
c.cc: In function ‘void selectionSort(int*, int)’:
c.cc:7:27: warning: unused variable ‘num’ [-Wunused-variable]
int minIndex, minValue, num;
^~~
pi@raspberrypi:/tmp $ ./a.out
The scores in descending order are 0 1 2 3 6 8 9
正如编译器所说的那样,可以删除第一个 num ,也可以不用在中重新定义它
当我运行程序时,算法不会对任何内容进行排序,它会显示相同的精确数组而没有任何变化。
以及以上更正后的评论:
更改它,但我仍然得到相同的结果。
一个可能的原因是,您定义了自己的 swap ,而该定义不执行 这样的操作:
void swap(int a, int b)
{
int c = a;
a = b;
b = c;
}
而不是例如
void swap(int & a, int & b)
{
int c = a;
a = b;
b = c;
}
或使用课程模板