黑马程序员技术交流社区

标题: 冒泡排序的问题 [打印本页]

作者: wxh794708907    时间: 2015-7-20 19:44
标题: 冒泡排序的问题
#include <stdio.h>
void maoPao(int arr[],int len){      // int len的作用是为了将数组的长度定义出来
    int i;
    int j;
    int temp;
    for(i = 0;i<len-1;i++){          //外层for循环
      for(j = 0;j<len -1 -i;j++){       //内存for循环 实现数组中内容的对换;j<len -1-i的原因是 外层for循环进行了一次对比之后就会少一个比较
        if(arr[j]>arr[j+1]){
          temp =arr[j];              //着这一步往下三步都是实现位置的兑换;
          arr[j] =arr[j+1];
          arr[j+1] =temp;
        }
      }
    }
}

int main(){
    int f1[10]={34,455,555,666,6,7,77,88,887,6};  //这是定义了一个随机序列的数组;
    maoPao(f1,10);
    int i;
    for(i = 0;i<10;i++){
    printf("%d\t",f1[i]);                         //按顺序来显示数组中的值;
    }
    return 0;
}
在这个程序里面,我实在是分不清;后面输出的是到底使用i还是j呢?就像是arr[]这个数组里面是写i还是j 它的依据是什么?
求高手解答
作者: liusuizuoyou    时间: 2015-7-21 19:53
外层循环是由  i 的的自增控制  一共循环 len-1次 就可以把顺序排好
内层循环 由 j 控制      每次循环换都是 arr[j]   arr[j+1]   比较大小(相邻的两个数组元素比较大小),如果前者比较大  那么就交换值,直到本次循环结束,那么最大值 ,也就自然而然的,放到了最后面。
作者: 408205555    时间: 2015-7-21 20:11
后面输出的是到底使用i还是j呢?
- 你所指的输出是指printf()吗?因为你的printf()放到了for循环里面,for循环()里面的变量是i你就使用i,是j你就使用j,当然我也可以使用a,b,c,d任何一个字符。
就像是arr[]这个数组里面是写i还是j 它的依据是什么?
- 写i或是写j并不是依据什么,第一是个人习惯,你也可以外层使用a,内层使用b。第二外层使用i内层使用j是为了将内外循环区别开来,不要在程序执行的时候发生混乱。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2