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;icout请注意,您的“功能”之间的唯一区别是以下几行:

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
{
在编辑时丢失了。它有效,你能检查一下吗?非常有效。非常感谢。