博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构java版之冒泡排序及优化
阅读量:6495 次
发布时间:2019-06-24

本文共 1601 字,大约阅读时间需要 5 分钟。

冒泡排序的时间用大O表示法是O(N^2).

传统的冒泡排序:

/*** @param total 要排序的数组长度*/public void sort(int total){int num[];if(total <= 0){System.out.println("请输入大于0的正整数");}else{num = new int[total];for (int i = 0 ; i < total; i++){//生成随机1到100之间的数Random ra =new Random();num[i] = ra.nextInt(100)+1;}System.out.println("要排序的数组为:" + Arrays.toString(num));int sum = 0;int out,in;for (out = total - 1; out > 1; out--){for (in = 0 ; in < out; in++){sum ++;if(num[in] > num[in+1]){int temp = num[in];num[in] = num[in+1];num[in+1] = temp;}}}// 最原始的冒泡排序for(int i = 0; i < total -1 ; i ++){for (int j = 0 ; j < total -1 ; j++){sum ++;if(num[j] > num[j+1]){int temp = num[j];num[j] = num[j+1];num[j+1] = temp;}}}System.out.println("排序完成的数组为:" + Arrays.toString(num));System.out.println("总共用次数:" + sum);}}

优化过后的冒泡排序:

/*** @param total 要排序的数组长度*/public void sort(int total){int num[];if(total <= 0){System.out.println("请输入大于0的正整数");}else{num = new int[total];for (int i = 0 ; i < total; i++){//生成随机1到100之间的数Random ra =new Random();num[i] = ra.nextInt(100)+1;}System.out.println("要排序的数组为:" + Arrays.toString(num));/**核心算法:* 双重循环,外层循环用于控制排多少次序。* 内层循环从第一位开始一直往后比较,内层循环一次后,可以将最大的数至于末尾。* 外层循环让内层循环继续排没有排序过的数组,排序过的不用再排。*/int sum = 0;int out,in;for (out = total - 1; out > 1; out--){for (in = 0 ; in < out; in++){sum ++;if(num[in] > num[in+1]){int temp = num[in];num[in] = num[in+1];num[in+1] = temp;}}}System.out.println("排序完成的数组为:" + Arrays.toString(num));System.out.println("总共用次数:" + sum);}}

大家对比可以发现,就是外层循环的时候有点变化,其他的代码都是一模一样的。

那么优化后的算法能快多少呢。我们都以数组长度为10来计算:

传统冒泡排序:9x9=81步,

优化后的冒泡排序:9+8+7+6+5+4+3+2=44步。

因为优化后的冒泡排序,每排完一次,最后一个数已经是最大的,就不需要再比较了。

转载地址:http://uxuyo.baihongyu.com/

你可能感兴趣的文章
python笔记21-列表生成式
查看>>
关于解决sql2012编辑器对象名无效问题
查看>>
跨链技术与通证经济
查看>>
[SignalR2] 认证和授权
查看>>
爬虫学习之-xpath
查看>>
js jQuery 右键菜单 清屏
查看>>
深入理解let和var的区别(暂时性死区)!!!
查看>>
dotConnect for Oracle
查看>>
Android开发需要的知识
查看>>
从零开始iOS8编程【iOS开发常用控件】
查看>>
我的友情链接
查看>>
软链接、硬链接
查看>>
详解linux vi命令用法
查看>>
mysql中执行shell命令
查看>>
Eclipse下C/C++开发环境搭建
查看>>
Eclipse中设置在创建新类时自动生成注释
查看>>
我的友情链接
查看>>
CoreOS 手动更新
查看>>
golang 分页
查看>>
再论机械式针对接口编程
查看>>