[java]冒泡排序的常规、改进以及递归实现
来源:互联网 发布:网络直播内容策划表格 编辑:程序博客网 时间:2024/05/22 17:21
package sort_book_datastruction;import java.util.Arrays;/** * 冒泡排序; * @author Administrator * */public class BubbleSort { public void bubbleSort(int[] array){ for(int i = 1;i<array.length;i++){ for(int j = 0;j<array.length-i;j++){ if(array[j]>array[j+1]){ int temp = array[j]; array[j] =array[j+1]; array[j+1] = temp; } } } } //冒泡的递归实现。 public void bubblesort(int[] array,int n){ if(n==1) return; if(array==null||array.length==0) return; for(int i=0;i<n-1;i++){ if(array[i]>array[i+1]){ array[i]=array[i]^array[i+1]; array[i+1]=array[i]^array[i+1]; array[i]=array[i]^array[i+1]; } } bubblesort(array,n-1); } /* * 冒泡排序算法的改进 对冒泡排序常见的改进方法是加入一标志性变量exchange, 用于标志某一趟排序过程中是否有数据交换,如果进行某一趟排序时并没有进行数据交换, 则说明数据已经按要求排列好,可立即结束排序,避免不必要的比较过程。本文再提供以下两种改进算法: 1.设置一标志性变量pos,用于记录每趟排序中最后一次进行交换的位置。 由于pos位置之后的记录均已交换到位,故在进行下一趟排序时只要扫描到pos位置即可。 * */ void Bubble_1 ( int r[], int n) { int i= n -1; //初始时,最后位置保持不变 while ( i> 0) { int pos= 0; //每趟开始时,无记录交换 for (int j= 0; j< i; j++) if (r[j]> r[j+1]) { pos= j; //记录交换的位置 int tmp = r[j]; r[j]=r[j+1]; r[j+1]=tmp; } i= pos; //为下一趟排序作准备 } } /** * 2.传统冒泡排序中每一趟排序操作只能找到一个最大值或最小值, * 我们考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以 * 得到两个最终值(最大者和最小者) , 从而使排序趟数几乎减少了一半。 * 改进后的算法实现为: * @param args */ void Bubble_2 ( int r[], int n){ int low = 0; int high= n -1; //设置变量的初始值 int tmp,j; while (low < high) { for (j= low; j< high; ++j) //正向冒泡,找到最大者 if (r[j]> r[j+1]) { tmp = r[j]; r[j]=r[j+1];r[j+1]=tmp; } --high; //修改high值, 前移一位 for ( j=high; j>low; --j) //反向冒泡,找到最小者 if (r[j]<r[j-1]) { tmp = r[j]; r[j]=r[j-1];r[j-1]=tmp; } ++low; //修改low值,后移一位 } } public static void main(String[] args) { // TODO Auto-generated method stub BubbleSort bs =new BubbleSort(); int[] array = {49,38,65,97,76,13,27,49}; //bs.bubbleSort(array); bs.bubblesort(array, array.length); System.out.println("bubbleSort:"+Arrays.toString(array)); }}
阅读全文
0 0
- [java]冒泡排序的常规、改进以及递归实现
- java递归实现冒泡排序
- java关于插入排序—希尔排序的理解,以及冒泡排序的改进
- 冒泡排序以及改进版冒泡排序
- C++实现改进的冒泡排序
- C++实现改进的冒泡排序
- 改进归并排序消除递归Java实现
- 冒泡排序算法以及改进
- Java改进的冒泡排序ImprovedBubbleSort
- 冒泡排序的改进
- 冒泡排序的改进
- 冒泡排序的改进
- 冒泡排序的改进
- 改进的冒泡排序
- 改进的冒泡排序
- 改进的冒泡排序
- 改进的冒泡排序
- 冒泡排序的改进
- BZOJ 2064: 分裂 状压dp
- HDU 2222 Keywords Search【AC自动机】
- CodeForces
- HDU 6070 Dirt Ratio(二分+线段树)
- 飞扬23期总结
- [java]冒泡排序的常规、改进以及递归实现
- HDOJ1106 排序(字符串数字提取)
- IOS UIScrollView实现自动轮播图功能
- 浅析Linux命令之grep
- Hadoop 及 Hive 压缩应用
- 动脑学院笔记
- jQuery基础
- 归并排序--JAVA代码实现
- SWOT分析和PEST分析