鱼C论坛

 找回密码
 立即注册
查看: 3563|回复: 7

[技术交流] 算法之排序——冒泡排序

[复制链接]
发表于 2015-1-26 18:24:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 雪是梅之香 于 2015-1-27 16:23 编辑

很基础的东西,如果你是刚入门,可以看一下

冒泡排序:
冒泡排序法(Bubble Sort)是所有排序算法中最简单、最基本的一种。冒泡排序法的思路就是交换排序,通过相邻数据的交换来达到排序的目的。
其排序流程如下:
(1)对数组中的各数据,依次比较相邻的两个元素的大小。
(2)如果前面的数据大于后面的数据,就交换这两个数据。经过第一轮的多次比较排序后,便可把最大的数据排好。
(3)再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的顺序排好数组各数据的顺序。
为了更清晰的理解冒泡排序算法的执行过程,这里我们举一个实际数据的例子;来一步一步地执行冒泡排序算法。对于五个整型数据118、101、105、127、112,这是一组无序的顺序。对其执行冒泡排序过程,如图所示。冒泡排序算法的执行步骤如下:
初始数据:118  101 105  127  112



解释步骤:(默认由小到大排序)
(1)第一次排序:首先比较118和101,由于118>101,所以交换这两个数,交换之后变成101  118 105  127  112,然后比较118和105,由于118>105,所以再次交换这两个数,交换完之后为101  105  118 127  112,接着比较118和127,由于118<127,所以不用交换,最后比较127和112,因为127>112,所以交换,完成之后为:101  105  118  112  127,于是,第一次排序之后就形成这样的的顺序:101  105  118 112  127,可以发现,第一次排序将数组中最大的数找了出来并排到了最后一个位置;
(2)第二次排序:首先比较101和118,101<118,不交换位置,101  105  118 112  127,接着比较105和118,105<118,依旧不交换位置,101  105  118 112  127,然后比较118和112,由于118>112,所以交换位置,交换后为:101  105 112  118  127;
(3)第三排序:初始为101  105  112 118  127,按照上面的步骤依次比较,发现此时已经排好了顺序,所以最终结果为:101  105  112 118  127。冒泡排序完毕。
  1. 代码实现:(用Java语言编写)
  2. public class BubbleSort{
  3.         static final int SIZE=10;
  4.         public static void main(String[] args) {
  5.                 // TODO Auto-generated method stub
  6.                 int[] num=new int[SIZE];
  7.                 for(int i=0;i<num.length;i++){
  8.                         num[i]=(int)(10+Math.random()*(101));
  9.                 }
  10.                 System.out.println("排序之前:");
  11.                 Traversal(num);
  12.                 System.out.println();
  13.                 shengxu(num);
  14.                 System.out.println("排序之后:");
  15.                 Traversal(num);
  16.         }
  17.         //遍历
  18.         static void Traversal(int[] num){
  19.                 for(int i=0;i<num.length;i++){
  20.                         System.out.print(num[i]+"  ");
  21.                 }
  22.         }
  23.         //降泡排序
  24.         static void jiangxu(int[] num){
  25.                 int temp;
  26.                 for(int i=0;i<num.length-1;i++){
  27.                         for(int j=0;j<num.length-1-i;j++){
  28.                                 if(num[j]>num[j+1]){
  29.                                         temp=num[j];
  30.                                         num[j]=num[j+1];
  31.                                         num[j+1]=temp;
  32.                                 }
  33.                         }
  34.                 }
  35.         }
  36.         //升泡排序法
  37.         static void shengxu(int num[]){
  38.                 int temp;
  39.                 for(int i=0;i<num.length;i++){
  40.                         for(int j=num.length-1;j>i;j--){
  41.                                 if(num[j-1]>num[j]){
  42.                                         temp=num[j-1];
  43.                                         num[j-1]=num[j];
  44.                                         num[j]=temp;
  45.                                 }
  46.                         }
  47.                 }
  48.         }
  49. }
复制代码



敬请期待其它排序算法的更新.......................





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-26 18:49:26 | 显示全部楼层
点个赞,遍历数组那三行代码写了两次,直接封装成一个函数,然后调用的话,会不会更好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-26 19:09:50 | 显示全部楼层
xcking 发表于 2015-1-26 18:49
点个赞,遍历数组那三行代码写了两次,直接封装成一个函数,然后调用的话,会不会更好

可以,感谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-27 16:14:27 From FishC Mobile | 显示全部楼层
强烈支持楼主ing来自: iPhone客户端
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-27 16:15:33 From FishC Mobile | 显示全部楼层
为什么不是BubbleSort类,而是P4_1类来自: iPhone客户端
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-27 16:20:47 | 显示全部楼层
百日维新 发表于 2015-1-27 16:15
为什么不是BubbleSort类,而是P4_1类

没想到这个啊,感谢,失误了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-27 16:23:50 | 显示全部楼层
百日维新 发表于 2015-1-27 16:15
为什么不是BubbleSort类,而是P4_1类

现在改过来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-27 16:37:28 From FishC Mobile | 显示全部楼层

你还有No1验证奇数那个没做完,赶紧把它干掉吧来自: iPhone客户端
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 09:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表