冒泡排序 -JAVA详解
2017-10-27 14:25
288 查看
/** * 冒泡排序是一种比较简单的排序方法,主要原理就是比较相邻元素大小,然后根据结果交换的过程,一次循环后使得最小或者最大的元素在最前面,以此类推,最后使得数组有序,时间复杂度O(n^2) * * @author yanhom * @time 2017/10/27 */ public class BubbleSort { /** * 1.基本的冒泡排序,两个循环,第一次循环拿第一个元素分别跟第二,三.....个元素比较,大于则交换,一次循环完之后最大的元素在最右边 * 2.然后依次拿后一个元素跟后边所有元素比较,大于交换 * 3.循环结束数组变成有序,时间复杂度O(n^2) * * @param arr 待排序数组 */ public static void basciSort(int[] arr) { for (int i = 0; i < arr.length; i++) { for(int j = i+1; j< arr.length; j++) { if(arr[i] > arr[j]) { swap(arr, i, j); } } } } /** * 改进版冒泡排序,引入一个变量flag标识内层循环是否是一个空循环(即没有交换元素,没进入if语句内),是则证明后边元素已经是有序的了,直接跳出外层循环 * 注意:内层循环 arr.length - 1 是为了不让数组越界,arr.length - 1 -i 减i得意思是最后i个元素已经有序,排序之前的 * * 最好情况,如果数组本身是有序的,则只需要n-1次比较就可以完成排序,时间复杂度O(n) * 最坏情况,如果数组倒序,比较次数为 n-1+n-2+...+1=n(n-1)/2,交换次数和比较次数等值。所以,其时间复杂度依然为O(n2) * * @param arr 待排序数组 */ public static void improveSort(int[] arr) { for (int i = 0; i < arr.length; i++) { boolean flag = true; for (int j = 0; j < arr.length - 1 -i; j++) { if(arr[j] > arr[j+1]) { swap(arr, j, j+1); flag = false; } } if(flag) { break; } } } /** * 交换操作 * * @param arr * @param i * @param j */ private static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void main(String[] args) { int[] arr = {3, 1, 0, 4, 5,2,6,6,8,6,7,8,9}; improveSort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
相关文章推荐
- 数据结构排序算法之冒泡排序详解(java实现)
- 菜鸟之Java小知识点--冒泡排序详解
- Java语言冒泡排序详解
- java数据结构与算法之冒泡排序详解
- java 算法之冒泡排序实例详解
- 新手必看——JAVA排序详解(冒泡排序和插入排序)
- 排序基础之插入排序、冒泡排序、选择排序详解与Java代码实现
- Java 设计模式详解
- Kruskal算法 之 Java详解
- Java中MVC详解以及优缺点总结
- Java构造和解析Json数据的两种方法详解2
- java Clone使用方法详解
- Java中的IO流系统详解
- Java,Android类加载顺序真正详解
- java 时间的处理类Date与Calendar-详解
- Java中常用的10种设计模式详解
- java线程中yield(),sleep(),wait()区别详解
- Java IO最详解
- java 虚拟机中对象访问详解
- java synchronized详解