以前初中有学过点c,但是最近发现那个原来的“冒泡”很是不对劲,但是思来想去想不明白,求教!!!
!
#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;
}
还有就是我用笔进行一的模拟,但是是不能达到正确结果的,编译出来却是可以?
下为图例:
排序一是错的,冒泡排序分为内层循环和外层循环,j表示的是内层的,交换也是发生在内层,所以应该是a[j]和a[j+1]交换
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;
}
}
}//这才是冒泡排序