首页 新闻 会员 周边

求助一个排序的疑惑

0
[已关闭问题] 关闭于 2011-08-31 10:41

原创 求助一个排序的疑惑收藏

以前初中有学过点c,但是最近发现那个原来的“冒泡”很是不对劲,但是思来想去想不明白,求教!!!

View Code


#include
<iostream>
#include
<stdlib.h>


using namespace std;
int main(){
#define num 7
int a[num];
cout
<<"请依次输入数组元素(num个)"<<endl;
int i;
int j;
int t;
for(int i = 0;i<num;i++)
cin
>>a[i];
/*for(i= 0;i<num;i++) //冒泡法一 (初中学的那个)
for(j=0;j<num;j++)
if(a[i]>a[j]){
t=a[j];
a[j]=a[i];
a[i]=t;
}
*/
for(i= 0;i<num;i++) //冒泡二
for(j=0;j<num;j++)
if(a[j]>a[j+1]){
t
=a[j];
a[j]
=a[j+1];
a[j
+1]=t;
}

cout
<<"排序结果为:"<<endl;
for(i=0;i<num;i++)
cout
<<a[i]<<" ";
system(
"pause");
return 0;
}

疑惑:如果使用排序一的话,结果竟然不是按照从大到小进行排序的?为什么?

还有就是我用笔进行一的模拟,但是是不能达到正确结果的,编译出来却是可以?

下为图例:

cuijiwei1989的主页 cuijiwei1989 | 初学一级 | 园豆:200
提问于:2011-06-26 12:58
< >
分享
所有回答(2)
0

排序一是错的,冒泡排序分为内层循环和外层循环,j表示的是内层的,交换也是发生在内层,所以应该是a[j]和a[j+1]交换

加百力 | 园豆:533 (小虾三级) | 2011-06-26 23:56
谢谢了,尽管所答非所问。您说的就是第二个冒泡。其实第一个不是冒泡。
支持(0) 反对(0) cuijiwei1989 | 园豆:200 (初学一级) | 2011-06-27 13:34
0

for(int i=0;i<数组.length-1;i++)//外城循环控制这一组数需要比较多少次

{

for(int j=0;j<数组.length-i-1)//内城循环控制每一次比较的数组长度是多少

  {

if(数组[j]>数组[j+1])//由小到大排序

        {    

            t=数组[j];//t是临时变量

             数组[j]=数组[j+1];

             数组[j+1]=t;

        }

  }

 

}//这才是冒泡排序

左手年华 | 园豆:338 (菜鸟二级) | 2011-06-27 17:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册