一个程序的问题,有几处不明白

Big鹏 2008-10-05 03:17:52

看了一贴;思想如下;(请解释以下代码!越详细越好!!)
函数sort(int a[],int n)的功能是对数组a中的a[0]~a[n-1]这n个元素进行排序。
排序过程如下:第一趟对所有的偶数下标p,比较a[p]和a[p+1],若a[p]>a[p+1],
则将两者交换;第二趟对所有的奇数下标q,比较a[q]和a[q+1],若a[q]>a[q+1],
则将两者交换;第三趟对偶数下标,第四趟对奇数下标,....
依将类推,直至整个数组元素有序排列为止。



#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;

void sort(int a[], int n)
{
int i, j, t, tag=1; //以下代码的思想请一一解释!
for(j=0; j <n; j++)
{
for(i=j%2; i<n-1;i+=2)
{
if(a[i]>a[i+1])
{
t=a[i];a[i]=a[i+1]; a[i+1]=t;
tag=0;
}
}
tag++;
if(tag==2) break;
}
}


...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyijiji 2008-10-05
  • 打赏
  • 举报
回复
代码确实有点问题,判断是否全部排序时有错.
并不是1次循环不交换元素就说明已经排序完毕,要2次循环都没有元素交换才说明排序完毕.

思路就是循环判断最多为元素个数次,每次循环,如满足情况则交换数据,并设置标记,表示交换过.这样一直判断,如果连续2次没有交换元素,则停止.表示排序完毕.
#include <iostream>
using namespace std;

void sort(int a[], int n)
{
int i, j, t, tag=1; //以下代码的思想请一一解释!
for(j=0; j <n; j++)
{
for(i=j%2; i<n-1;i+=2)
{
if(a[i]>a[i+1])
{
t=a[i];a[i]=a[i+1]; a[i+1]=t;
tag=1; //
}
}
tag++;
if(tag==3) break; //
}
}
int main(){
int a[8]={6,7,8,9,0,1,2,3};
sort(a,8);
for(int i=0;i<8;i++)
cout<<a[i]<<endl;
return 0;
}
ked 2008-10-05
  • 打赏
  • 举报
回复
楼上有牛人,我等飘过。

(红花的3次方是何含义?)
rock_HX 2008-10-05
  • 打赏
  • 举报
回复
我的看法:
算法设计错误...
lz可以自己跑一下

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;

void sort(int a[], int n)
{
int i, j, t, tag=1; //以下代码的思想请一一解释!t为临时数据.tag为标签
for(j=0; j <n; j++)
{
for(i=j%2; i<n-1;i+=2)
{
if(a[i]>a[i+1])
{
t=a[i];a[i]=a[i+1]; a[i+1]=t;
tag=0;
}
}
tag++;
if(tag==2) break;
}
}

int main()
{
int array[8] = {6, 7, 8, 9, 0, 1, 2, 3};
sort(array, 8);
for (int i = 0; i < 8; ++i)
{
std::cout << array[i] << " ";
}

system("pause");
return 0;
}

baihacker 2008-10-05
  • 打赏
  • 举报
回复
最后j为偶数是j,j+1是有序的
j为奇数的时候j,j+1也是有序的.
那么任意两个相邻元素也是有序的.
最后说明整个数组也是有序的.
qqwx_1986 2008-10-05
  • 打赏
  • 举报
回复
楼主可以拿张纸 然后再纸上多画画 理解的应该会很快的
rock_HX 2008-10-05
  • 打赏
  • 举报
回复
抢沙发再细看

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧