zoukankan      html  css  js  c++  java
  • java冒泡排序

    记得有一次笔试要写一个冒泡排序,一下子就懵了,虽然上学时有开过算法与结构的课,但基本都在打盹,根本就没有了解过其排序原理。好吧,以前的潇洒,现在的苦逼,趁失眠时间了解一下冒泡排序。

    网上概念一大堆,参差不齐,最后写出来了,并可以升序排序。但对比了网上写的排序发现自己写的每一趟都比较到最后一个元素,可能是对概念没理解透彻吧(自我安慰一下)。后来发现这个博客描述写的挺好的:http://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html,但感觉他的代码逻辑有点不正确,而且评论也有这样的反馈所以就不贴了,有兴趣的朋友可以前去了解。

    博客上的简要描述

    原理:比较相邻的元素。如果第一个比第二个大,就交换他们两个,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,

    然后再从头开始进行两两比较交换,直到倒数第二位时结束。

    例子为从小到大排序,

    原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |

    第一趟排序(外循环)

    第一次两两比较6 > 2交换(内循环)

    交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

    交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

    第二次两两比较,6 > 4交换

    交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

    交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |

    第三次两两比较,6 > 1交换

    交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |

    交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |

    第四次两两比较,6 > 5交换

    交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |

    交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

    第五次两两比较,6 < 9不交换

    交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

    交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

    第二趟排序(外循环)

    第一次两两比较2 < 4不交换

    交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

    交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

    第二次两两比较,4 > 1交换

    交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |  
    交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

    第三次两两比较,4 < 5不交换

    交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |  
    交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

    第四次两两比较,5 < 6不交换

    交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

    交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

    ...

    冒泡大概就这样的流程

    一开始跟着概念写的(自我反省,大家勿喷):

     1  private static String bubbleSort(int[] array) {
     2         int length = array.length;
     3         for (int i = 0; i < length; i++) {
     4             for (int j = 0; j < length; j++) {
     5 
     6                 if (j+1 >= length) {
     7                     break;
     8                 }
     9 
    10                 int first = array[j];
    11                 int second = array[j+1];
    12                 if (first > second) {
    13                     array[j] = second;
    14                     array[j+1] = first;
    15                 }
    16             }
    17         }
    18         return Arrays.toString(array);
    19     }
    View Code

    网上的:

     1 public class BubbleSort {
     2 
     3     public static void main(String[] args) {
     4 
     5         int[] array = new int[]{90, 12, 15, 15, 12, 90, 9, 21, 51, 3, 2, 1, 7, 8, 9};
     6         System.out.println("array:"+Arrays.toString(array));
     7         System.out.println("bubbleSort:"+bubbleSort(array));
     8     }
     9 
    10     private static String bubbleSort(int[] array) {
    11         int length = array.length;
    12         for (int i = 0; i < length; i++) {
    13             for (int j = 0; j < length-1-i; j++) {
    14 
    15                 int first = array[j];
    16                 int second = array[j+1];
    17                 if (first > second) {
    18                     array[j] = second;
    19                     array[j+1] = first;
    20                 }
    21             }
    22         }
    23         return Arrays.toString(array);
    24     }
    25 }
  • 相关阅读:
    基础最短路(模板 bellman_ford)
    UVA-12304 Race(递推)
    How do you add?(递推)
    Coconuts, Revisited(递推+枚举+模拟)
    UVA-10726 Coco Monkey(递推)
    UVA-10995 Educational Journey
    UVA-10339 Watching Watches
    【React】377- 实现 React 中的状态自动保存
    【JS】376- Axios 使用指南
    【Nodejs】375- 如何加快 Node.js 应用的启动速度
  • 原文地址:https://www.cnblogs.com/Mr-Mo/p/4621620.html
Copyright © 2011-2022 走看看