【常用排序算法】冒泡排序与冒泡排序优化改进(Java实现)
2017-11-13 16:46
357 查看
冒泡排序:
public void sortIntegers(int[] A) { for(int j=0;j<A.length-1;j++) for(int i=0;i<A.length-1-j;i++){ if(A[i]>A[i+1]){ int temp=A[i]; A[i]=A[i+1]; A[i+1]=temp; } } }
对相邻的元素进行两两比较,如果前者比后者大,就相互交换。
冒泡排序优化方案1
public void sortIntegers(int[] A) { for(int j=0;j<A.length-1;j++){ Boolean state=true; for(int i=0;i<A.length-1-j;i++){ if(A[i]>A[i+1]){ int temp=A[i]; A[i]=A[i+1]; A[i+1]=temp; state=false; } } if(state){ break; } } }
加入状态位state,当内部for循环里的 if(A[i]>A[i+1]) 一次也没有满足时,说明已经是有序的序列。
冒泡排序优化方案2:
pu 4000 blic void sortIntegers(int[] A) { int size=A.length-1,k=0; for(int j=0;j<A.length-1;j++){ Boolean state=true; for(int i=0;i<size;i++){ if(A[i]>A[i+1]){ int temp=A[i]; A[i]=A[i+1]; A[i+1]=temp; k=i; state=false; } } size=k; if(state){ break; } } }
在优化方案1的基础上,对内部for循环继续优化,找出并记录 满足条件(if(A[i]>A[i+1]))最大值i,此处的“i”相当于一条分界线,序号在“i”之后的序列已经处于有序。
下一趟内部循环时的满足条件就为:i<上一步的最大值‘i’;为什么这里不需要用 <= 呢,也是因为if(A[i]>A[i+1])这个筛选条件。
冒泡排序优化方案3:鸡尾酒排序/定向冒泡排序
public void sortIntegers(int[] A) { int left=0; int right=A.length-1; while(left<right){ //找出最大的一个并放置在当前尾部 for(int i=left;i<=right-1;i++){ if(A[i]>A[i+1]){ int temp=A[i]; A[i]=A[i+1]; A[i+1]=temp; } } right--; //找出最小的一个并放置在当前首部 for(int i=right;i>=left+1;i--){ if(A[i]<A[i-1]){ int temp=A[i]; A[i]=A[i-1]; A[i-1]=temp; } } left++; } }
此处是从低到高然后从高到低,冒泡排序则是从低到高
如果您有更好的解法,欢迎您在留言区补充,感谢!!
相关文章推荐
- 插入排序,选择排序,冒泡排序等常用排序算法(java实现)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 常用的各种排序算法的JAVA实现
- 用Java实现几种常用的排序算法
- java实现的几个常用排序算法
- 常用排序算法分析与实现(Java版)
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- 几种常用的排序算法:插入排序、冒泡排序、选择排序的算法及C++实现
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法 广州疯狂JAVA培训
- 用Java实现几种常用排序算法(先实现一个org.rut.util.algorithm.SortUtil)
- 常用的各种排序算法的JAVA实现
- Java实现的几个常用排序算法详细解读
- 常用的各种排序算法的JAVA实现