冒泡排序实现及优化(Java)
2017-03-09 20:03
435 查看
冒泡排序算法的运作如下:
首先简单的第一种实现方法:
对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。如果有一趟没有发生交换,说明排序已经完成。
继续优化,如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。
排序算法的平均复杂度为O(N^2)。
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3、针对所有的元素重复以上的步骤,除了最后一个。 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
首先简单的第一种实现方法:
public static int[] bubbleSort1(int[] A, int n) { int i,j; for(i=0; i<n; i++){ for(j = 1 ; j<n-i;j++){ if (A[j-1]>A[j]){ swap(A,j-1,j); } } } return A; } private static void swap(int[] array ,int first ,int second){ int temp; temp = array[first]; array[first] = array[second]; array[second] = temp; }
对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。如果有一趟没有发生交换,说明排序已经完成。
public static int[] bubbleSort2(int[] A,int n){ int j; boolean flag = true; while(flag){ flag = false; for(j=1; j<n; j++){ if(A[j-1]>A[ 4000 j]){ swap(A,j-1,j); flag = true; } } n--; } return A; }
继续优化,如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。
public static int[] bubbleSort3(int[] A, int n){ int j; int flag = n; while(flag>0){ flag = 0; for(j=1; j<n; j++){ if(A[j-1]>A[j]){ swap(A,j-1,j); flag = j; } } } return A; }
排序算法的平均复杂度为O(N^2)。
相关文章推荐
- Java实现冒泡排序以及优化冒泡排序的一些小技巧
- 冒泡排序实现及算法优化(java)
- 冒泡排序及其优化的 Java 实现
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- 【LintCode-463】整数排序(Java实现-冒泡排序优化)
- # Java实现冒泡排序—详细解析优化版冒泡
- 【常用排序算法】冒泡排序与冒泡排序优化改进(Java实现)
- java实现冒泡排序
- java实现的冒泡排序
- java中冒泡排序的实现
- java实现冒泡排序
- 交换排序之冒泡排序(java实现)
- java实现选择排序和冒泡排序
- java实现冒泡排序
- java实现冒泡排序
- 冒泡排序原理和JAVA实现
- JAVA实现冒泡排序
- Java实现之冒泡排序
- 冒泡排序(JAVA)实现
- 用JAVA实现排序算法之一:冒泡排序