自定义排序算法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]);
`好的,谢谢,我想修改选择排序和鸡尾酒杯排序