本帖最后由 南荒北芜 于 2023-2-4 16:34 编辑
最近在研究冒泡算法,自己根据网上的资料大概写了一下,程序运行没问题,但是逻辑不对。
代码一:
[C++] 纯文本查看 复制代码 #include<iostream>
using namespace std;
int main(){
int i[]={0,5,20,10,74,89,63,52,63,96}; //定义数组
int c; //获取数组长度
int a=0; //比较的轮数
int t=0; //每轮比较的次数
int d=0; //交换数值所用
c=sizeof(i)/sizeof(i[0]); //获取数组长度
for(;a<c-1;++a){ //循环次数为数组长度-1即可
for(;t<c-1-a;++t){
if(i[t]<i[t+1]){
d=i[t]; //临时存放交换的数值
i[t]=i[t+1]; //交换数值
i[t+1]=d; //交换临时存放的数值
}
}
}
for(a=0;a<c;++a){
cout<<i[a]<<' ';
}
}
代码二:
[C++] 纯文本查看 复制代码 #include<iostream>
using namespace std;
int main(){
int i[]={0,5,20,10,74,89,63,52,63,96}; //定义数组
int c; //获取数组长度
int a=0; //比较的轮数
int t=0; //每轮比较的次数
int d=0; //交换数值所用
c=sizeof(i)/sizeof(i[0]); //获取数组长度
for(;a<c-1;++a){ //循环次数为数组长度-1即可
for(t=0;t<c-1-a;++t){
if(i[t]<i[t+1]){
d=i[t]; //临时存放交换的数值
i[t]=i[t+1]; //交换数值
i[t+1]=d; //交换临时存放的数值
}
}
}
for(a=0;a<c;++a){
cout<<i[a]<<' ';
}
}
代码一输出的数值并没有按从大到小顺序排序,但是代码二却能按照从大到小顺序排列,代码仔细检查过了没啥大问题。
但是突然发现循环里加个初始化变量并赋值就可以正确排序了,详见代码二,问题是,代码一中,已经定义了变量t并已赋值,但不知道为什么排序顺序不对。 |