黑马程序员技术交流社区

标题: 冒泡排序:键盘输入数字,把这些数字按照从小到大排列 [打印本页]

作者: 408205555    时间: 2015-7-21 10:17
标题: 冒泡排序:键盘输入数字,把这些数字按照从小到大排列
本帖最后由 408205555 于 2015-7-21 10:26 编辑

void main(char argc,const char * argv[]){
        //需求:从键盘获取10个数放入到数组中,然后找出10个数中最大的数
        //定义变量,记录10个数字中的最大值
        int max=0;
        //创建数组
        int numbers[10];
        //记录数组长度
        int length=sizeof(numbers)/sizeof(int);
        //使用for循环,循环输入10个数字,并放入到数组
        for(int i=0;i<length;i++){
                        //提示用户输入10个数字
                printf("请输入%d个数字:",i+1);
                scanf("%d\n",&numbers);
        }
        //冒泡排序,有n个数,就循环n-1次
        //外层为什么要length-1?
        //4个数互相比较需要比3次,3个数互相比较需要比2次,所以n个数比较就要比n-1次
        for(int i=0;i<length-1;i++){
                //内层为什么要length-n?
                //外层每循环一次,都会有一个数字下沉,循环两次就有两个数字下沉,n次就会有n个数字下沉
                //为了程序更有效率的对数字排序,我们将已经下沉的数字不再参与到下次的比较,也就是让剩下的数进行比较
                //length-n就是n次循环后剩下的数字的个数,length-n-1就是剩下的数字需要互相比较的次数
                for(int j=0;j<length-1-i;j++){
                        if(numbers[j]>numbers[j+1]){
                                //max相当于中转站,让两个数互转位置的同时不至于丢失其中一个数据
                                max=numbers[j];
                                numbers[j]=numbers[j+1];
                                numbers[j+1]=max;
                        }
                }
        }
        //for循环打印排序后的数组
        for(int i=0;i<length;i++){
                printf("%d \n",numbers);
        }
}
作者: 294250051    时间: 2015-7-21 10:25
.............................




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