开发者社区> 问答> 正文

C语言冒泡排序

screenshot

#include <stdio.h>

#define Max  5
int main(int argc, const char * argv[]) {
    int  a[Max] = {22,16,80,1,10};
    int time = 0;
    int count = 0;
    
    for (int i = 0; i < Max - 1 ; i++) {
        for (int j = 0; j < (Max - 1 - i); j++) {
            time++;
            if (a[j] > a[j+1] ) {
                int tmp;
                tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
                count++;
            }
        }
    }
    printf("交换次数%d\n",count);
    printf("执行次数%d\n",time);
    //遍历
    for (int i = 0 ; i < Max; i++) {
        printf("%d ",a[i]);
    }
    return 0;
}

Question : 
1.我这已经是最优的了吧
2.第二个for循环的j条件,为什么要设置成 Max - i - 1 ,Max表示数组长度.

展开
收起
杨冬芳 2016-05-27 19:03:38 4359 0
5 条回答
写回答
取消 提交回答
  • 问题1:这个算法还有一点可以优化,就是对已经有序的序列的处理,比如{1,2,3,5,4};,处理方法是如果没有交换就跳出循环不过我没有完成优化,因为测试过没能完成排序。 问题2:j条件的设置:取决于i次循环后未排序的长度。

    2020-03-19 10:55:38
    赞同 展开评论 打赏
  • 专注物联网

    问题1:这个算法还有一点可以优化,就是对已经有序的序列的处理,比如{1,2,3,5,4};,处理方法是如果没有交换就跳出循环不过我没有完成优化,因为测试过没能完成排序。
    问题2:j条件的设置:取决于i次循环后未排序的长度。

    2019-07-17 19:18:39
    赞同 展开评论 打赏
  • 乐于学习与分析

    问题1:这个算法还有一点可以优化,就是对已经有序的序列的处理,比如{1,2,3,5,4};,处理方法是如果没有交换就跳出循环不过我没有完成优化,因为测试过没能完成排序。
    问题2:j条件的设置:取决于i次循环后未排序的长度

    2019-07-17 19:18:39
    赞同 展开评论 打赏
  • 软件开发,安全加密

    问题1:这个算法还有一点可以优化,就是对已经有序的序列的处理,比如{1,2,3,5,4};,处理方法是如果没有交换就跳出循环不过我没有完成优化,因为测试过没能完成排序。
    问题2:j条件的设置:取决于i次循环后未排序的长度。

    2019-07-17 19:18:39
    赞同 展开评论 打赏
  • IT从业

    问题1:这个算法还有一点可以优化,就是对已经有序的序列的处理,比如{1,2,3,5,4};,处理方法是如果没有交换就跳出循环不过我没有完成优化,因为测试过没能完成排序。
    问题2:j条件的设置:取决于i的值,因为i之前都是排过序的,还有数组最后一位元素也是排过的。

    2019-07-17 19:18:39
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载