Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义排序算法c++; 我正在修改C++,我就像让我们做一个排序算法< /C> >:_C++_Arrays_Algorithm_Sorting_Overwrite - Fatal编程技术网

自定义排序算法c++; 我正在修改C++,我就像让我们做一个排序算法< /C> >:

自定义排序算法c++; 我正在修改C++,我就像让我们做一个排序算法< /C> >:,c++,arrays,algorithm,sorting,overwrite,C++,Arrays,Algorithm,Sorting,Overwrite,我做了一些事情,但它没有对数组进行排序,而是用最大值覆盖了数组 我不知道我的错误在哪里,因为我在纸上运行了算法(不问),结果是正确的 我尝试了所有可能的修改。 有什么帮助吗 #include <iostream> #include <cstring> using namespace std; int main() { int mn = 0, mx = 0; int a[] = { 4, 8, 5, 2, 6, 9, 0, 3, 1, 7 };

我做了一些事情,但它没有对数组进行排序,而是用最大值覆盖了数组

我不知道我的错误在哪里,因为我在纸上运行了算法(不问),结果是正确的

我尝试了所有可能的修改。
有什么帮助吗

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int mn = 0, mx = 0;
    int a[] = { 4, 8, 5, 2, 6, 9, 0, 3, 1, 7 };

    for (int i = 0; i < 10; i++)
    {
        mn = a[i]; mx = a[i];
        for (int j = i; j < 10 - i; j++)
        {
            mn = min(a[j], mn);
            mx = max(a[j], mx);
        }
        swap(a[i], mn);
        swap(a[10-1-i], mx);
    }

    for(int i=0;i<10;i++)
    {
        cout<<a[i]<<" ";
    }
}
#包括
#包括
使用名称空间std;
int main()
{
int mn=0,mx=0;
inta[]={4,8,5,2,6,9,0,3,1,7};
对于(int i=0;i<10;i++)
{
mn=a[i];mx=a[i];
对于(int j=i;j<10-i;j++)
{
mn=min(a[j],mn);
mx=最大值(a[j],mx);
}
掉期(a[i],mn);
交换(a[10-1-i],mx);
}

对于(int i=0;i您没有交换数组元素,但基本上您将最小/最大值写入数组中的相应位置。它们的旧值只是被覆盖。您需要跟踪最小/最大元素的位置并相应地交换,例如
交换(a[i],a[min\u pos])
。此外,在每次迭代中将两个元素放置到位时,可以运行外循环,直到到达数组的中间

以下是工作代码:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int mn = 0, mx = 0;
    int a[] = { 4, 8, 5, 2, 6, 9, 0, 3, 1, 7 };

    for (int i = 0; i < 10 / 2; i++)
    {
        int min_pos = i, max_pos = i;

        for (int j = i; j < 10 - i; j++)
        {
            if (a[j] < a[min_pos]) {
                min_pos = j;
            } else if (a[j] > a[max_pos]) {
                max_pos = j;
            }
        }

        int min_val = a[min_pos];
        int max_val = a[max_pos];

        swap(a[i], a[min_pos]);
        swap(a[10-1-i], a[max_pos]);

        a[i] = min_val;
        a[10-1-i] = max_val;
    }

    for(int i=0;i<10;i++)
    {
        cout<<a[i]<<" ";
    }
}
#包括
#包括
使用名称空间std;
int main()
{
int mn=0,mx=0;
inta[]={4,8,5,2,6,9,0,3,1,7};
对于(int i=0;i<10/2;i++)
{
int min_pos=i,max_pos=i;
对于(int j=i;j<10-i;j++)
{
如果(a[j]a[max_pos]){
最大位置=j;
}
}
int min_val=a[min_pos];
int max_val=a[max_pos];
掉期(a[i],a[min_pos]);
互换(a[10-1-i],a[max_pos]);
a[i]=最小值;
a[10-1-i]=最大值;
}

对于(int i=0;i您没有交换数组元素,但基本上您将最小/最大值写入数组中的相应位置。它们的旧值只是被覆盖。您需要跟踪最小/最大元素的位置并相应地交换,例如
交换(a[i],a[min\u pos])
。此外,在每次迭代中将两个元素放置到位时,可以运行外循环,直到到达数组的中间

以下是工作代码:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int mn = 0, mx = 0;
    int a[] = { 4, 8, 5, 2, 6, 9, 0, 3, 1, 7 };

    for (int i = 0; i < 10 / 2; i++)
    {
        int min_pos = i, max_pos = i;

        for (int j = i; j < 10 - i; j++)
        {
            if (a[j] < a[min_pos]) {
                min_pos = j;
            } else if (a[j] > a[max_pos]) {
                max_pos = j;
            }
        }

        int min_val = a[min_pos];
        int max_val = a[max_pos];

        swap(a[i], a[min_pos]);
        swap(a[10-1-i], a[max_pos]);

        a[i] = min_val;
        a[10-1-i] = max_val;
    }

    for(int i=0;i<10;i++)
    {
        cout<<a[i]<<" ";
    }
}
#包括
#包括
使用名称空间std;
int main()
{
int mn=0,mx=0;
inta[]={4,8,5,2,6,9,0,3,1,7};
对于(int i=0;i<10/2;i++)
{
int min_pos=i,max_pos=i;
对于(int j=i;j<10-i;j++)
{
如果(a[j]a[max_pos]){
最大位置=j;
}
}
int min_val=a[min_pos];
int max_val=a[max_pos];
掉期(a[i],a[min_pos]);
互换(a[10-1-i],a[max_pos]);
a[i]=最小值;
a[10-1-i]=最大值;
}

对于(int i=0;ioutput->(预期)0,1,2,3,4,5,6,7,8,9(现实)0,8,2,3,4,5,6,7,1,9@darijan2002当然还有很大的改进空间,但至少你知道它出错的角落案例:)@darijan2002考虑算法的第二次迭代。
i==1
min\u pos==8
max\u pos==1
。然后交换元素1和8,然后有效地交换8和1,使数组保持相同的状态。这就是我存储值的原因。或者,您可以通过将这些行替换为
if来检查这种情况是否发生(!(min_pos==10-1-i和max_pos==i)){swap(a[i],a[min_pos])}swap(a[10-1-i],a[max_pos]);
`好吧,无论如何,谢谢我想修改选择排序和鸡尾酒奶昔sortoutput->(预期)0,1,2,3,4,5,6,7,8,9(现实) 0,8,2,3,4,5,6,7,1,9@darijan2002当然还有很大的改进空间,但至少你知道它出错的角落案例:)@darijan2002考虑算法的第二次迭代。
i==1
min\u pos==8
max\u pos==1
。然后交换元素1和8,然后有效地交换8和1,使数组保持相同的状态。这就是我存储值的原因。或者,您可以通过将这些行替换为
if来检查这种情况是否发生(!(min_pos==10-1-i和max_pos==i)){swap(a[i],a[min_pos])}swap(a[10-1-i],a[max_pos]);
`好的,谢谢,我想修改选择排序和鸡尾酒杯排序