C++ 在具有两个';对于循环';
我正在尝试按降序和升序对数组进行排序。程序的输出将打印未排序的数组,按降序排序的数组和按升序排序的数组。问题是我必须声明一个函数并使用默认参数。我不能使用函数重载。这就是我的问题所在。我为循环做了两个C++ 在具有两个';对于循环';,c++,arrays,sorting,C++,Arrays,Sorting,我正在尝试按降序和升序对数组进行排序。程序的输出将打印未排序的数组,按降序排序的数组和按升序排序的数组。问题是我必须声明一个函数并使用默认参数。我不能使用函数重载。这就是我的问题所在。我为循环做了两个,一个用于降序,一个用于升序。如果我是函数重载,那么很容易打印出每一个函数,我只需要一个函数是下降顺序(),另一个是上升顺序()。但是由于我使用的是一个函数是selectionSort(),我不知道如何使一个for loop对应于selectionSort(arr,SIZE),另一个对应于selec
,一个用于降序,一个用于升序。如果我是函数重载,那么很容易打印出每一个函数,我只需要一个函数是下降顺序()
,另一个是上升顺序()
。但是由于我使用的是一个函数是selectionSort()
,我不知道如何使一个for loop
对应于selectionSort(arr,SIZE)
,另一个对应于selectionSort(arr,SIZE,1)
。这可能是一个很容易回答的问题,但我只是一个初学者,我真的很困惑。谢谢你的帮助
我的代码运行,但它不打印我想要的输出。它打印降序两次,而不是先打印降序再打印升序
#include <iostream>
using namespace std;
const int SIZE = 10;
void printArr(int* arr, int len){
for(int i; i < len; i++)
cout << arr[i] << " ";
cout << endl;
}
void swap(int *xp, int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
void selectionSort(int* arr, int n=0, int var = 0)
{
int i, j, smallest;
//loop for descending order
for (i = 0; i < n-1; i++){
smallest = i;
for (j = i+1; j < n; j ++)
if (arr[j] > arr[smallest])
smallest=j;
swap(&arr[smallest], &arr[i]);
}
//loop for ascending order
for (i=0; i<n-1; i++){
smallest = i;
for(j = i+1; j<n; j++)
if(arr[j] < arr[smallest])
smallest=j;
swap(&arr[smallest], &arr[i]);
}
}
// Declare function "selectionSort" here.
// (using std::swap)
int main()
{
int arr[SIZE] = {5, 13, 6, 1, 32, 65, 87, 23, 14, 88};
cout << "Before sort: " << endl;
printArr(arr, SIZE);
cout << "Sorted (descending order): " << endl;
selectionSort(arr, SIZE);
printArr(arr, 10);
cout << "Sorted (ascending order): " << endl;
selectionSort(arr, SIZE, 1);
printArr(arr, 10);
return 0;
}
#包括
使用名称空间std;
常数int SIZE=10;
无效打印阵列(整数*阵列,整数长度){
for(int i;i cout请注意,您的“功能”之间的唯一区别是以下几行:
if (arr[j] > arr[smallest])
您可以简单地使此条件依赖于var
,如下所示:
if (var ? arr[j] < arr[smallest] : arr[j] > arr[smallest])
if(var?arr[j]arr[最小])
这相当于:
if ((var && arr[j] < arr[smallest]) || (!var && arr[j] > arr[smallest]))
if((var&&arr[j]arr[minimable]))
只写一个“函数”。请注意,“函数”之间的唯一区别是以下几行:
if (arr[j] > arr[smallest])
您可以简单地使此条件依赖于var
,如下所示:
if (var ? arr[j] < arr[smallest] : arr[j] > arr[smallest])
if(var?arr[j]arr[最小])
这相当于:
if ((var && arr[j] < arr[smallest]) || (!var && arr[j] > arr[smallest]))
if((var&&arr[j]arr[minimable]))
只写一个“函数”
我做了两个for循环,一个用于降序,一个用于升序。[…]因为我使用的是一个函数是selectionSort()
,我不知道如何使一个for循环对应于selectionSort(arr,SIZE)
,另一个对应于selectionSort(arr,SIZE,1)
“简单”的方法是使用if
if ( val == 0 ) {
//loop for descending order
for (i = 0; i < n-1; i++) {
// ...
}
}
else {
//loop for ascending order
for (i=0; i<n-1; i++) {
// ...
}
}
if(val==0){
//降序循环
对于(i=0;iselectionSort()
,我不知道如何使一个for循环对应于selectionSort(arr,SIZE)
,另一个对应于selectionSort(arr,SIZE,1)
“简单”的方法是使用if
if ( val == 0 ) {
//loop for descending order
for (i = 0; i < n-1; i++) {
// ...
}
}
else {
//loop for ascending order
for (i=0; i<n-1; i++) {
// ...
}
}
if(val==0){
//降序循环
对于(i=0;i
对于(i=0;iI建议使用常规if语句以保持清晰,因为@RIFF可能还没有了解三元数。@dave Ok,添加了一个没有?:
的选项。感谢您添加常规if语句,因为@dave说我还没有了解三元数。我建议使用常规if语句以保持清晰,因为@RIFF可能没有lea我还没有听说过ternaries。@dave Ok,添加了一个没有?:
的选项。感谢您添加常规的if语句,@dave说我还没有了解ternaries。/(使用std::swap)
这条评论是你的老师留下的吗?你已经被介绍过函数指针、类或引用了吗?@Bob_uuu是的,我的老师留下了这条评论作为建议。是的,我被介绍过指针和引用,但我远不是它们的专家。那么,你为什么不遵循它呢?;)@Bob_uuu我还没有学过如何使用std::swap
,所以我现在不想弄乱它。如果你能在这个例子中演示如何使用它,我想这会很好。所以我至少可以看到它是如何使用的,但真的没有必要。这更多的是一个建议,而不是一个要求。/(使用std::swap)
这条评论是你的老师留下的吗?你已经被介绍过函数指针、类或引用了吗?@Bob_uuu是的,我的老师留下了这条评论作为建议。是的,我被介绍过指针和引用,但我远不是它们的专家。那么,你为什么不遵循它呢?;)@Bob_uuu我还没有被教过如何使用std::swap
,所以我现在不想把它弄乱。如果你能在这个例子中演示如何使用它,我想这会很好。所以我至少可以看到它是如何使用的,但真的没有必要。这更多的是一个建议,而不是一个要求。非常感谢你,但我尝试实现了您使用std::swap编写的函数,我没有得到正确的输出。@riff抱歉,a{
在编辑时丢失了。它可以工作,你能检查一下吗?非常有用。非常感谢。非常感谢,但我尝试实现了你用std::swap
编写的函数,但我没有得到正确的输出。@riff抱歉,a{
在编辑时丢失了。它有效,你能检查一下吗?非常有效。非常感谢。