冒泡排序及其优化

原创 2017年07月23日 22:11:09
/**
 * 冒泡排序及其优化
 * @author shuaicenglou
 *
 */
public class Maopao {
    public static void main(String[] args) {
        int[] a = {4,3,2,1};
        long startTime = System.nanoTime();    //获取开始时间
        sort(a);
        long endTime = System.nanoTime();      //获取结束时间
        System.out.println("程序运行时间:" + (endTime - startTime) + "ns");    //输出程序运行时间
        //for(int i:a) System.out.println(i);
    }

    /**
     * 优化算法2:优化外层循环的同时优化内层循环,内层循环每次循环记录最后一次交换发生的位置pos,
     * 当下一次循环开始时,[0,pos-1]是未排好序的,[pos,n-1]是有序的(n为数组长度),
     * 因为pos之后的数据没有发生交换,所以是有序的
     * 因此可以从0开始,到pos交换结束
     * 在最坏(完全逆序)情况下比较次数较优化算法1减少了50%,较原始算法比较次数减少75%
     * @param array
     */
    public static void sort2(int[] array){
        int n = array.length,pos=0,k=n;//pos记录最后发生交换的位置
        int num = 0;
        for(int i=0;i<n;i++){
            boolean flag = true;
            for(int j=0;j<k-1;j++){
                num+=1;
                if(array[j]>=array[j+1]){
                    int cache = array[j];
                    array[j] = array[j+1];
                    array[j+1] = cache;
                    flag = false;
                    pos = j;      //记录发生交换的位置
                }
            }
            k=pos+1;  //注意边界条件
            if(flag) break;
        }
        System.out.println("比较了"+num+"次");
    }
    /**
     * 优化算法1:使用标志位标记是否未发生交换,若未发生交换则提前结束循环
     * 比原始算法比较次数减少了25%
     * @param array
     */
    public static void sort(int[] array){
        int len = array.length;//记录数组长度
        int num=0;   //记录比较次数
        while(true){
            boolean flag = true;  //设置标志位
            for(int i=0;i<len-1;i++){
                num+=1;
                if(array[i]>=array[i+1]){
                    int mid = array[i];
                    array[i] = array[i+1];
                    array[i+1] = mid;
                    flag = false;
                }
            }
            if(flag) break;
        }
        System.out.println("比较了"+num+"次");
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

经典冒泡排序优化

  • 2014年09月09日 17:23
  • 2KB
  • 下载

JAVA冒泡排序及其优化

  • 2015年11月02日 16:58
  • 3KB
  • 下载

冒泡排序算法及其两种优化

冒泡排序算法及其两种优化 1、排序方法      将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R...

冒泡排序优化算法

  • 2013年11月26日 20:02
  • 2KB
  • 下载

冒泡排序的优化算法

/* *减少了冒泡排序外面的循环的次数,如果在第K项后没有产生交换, *则K项之后所有的项必定有序,如果k=0则说明整个数组都有序,则退出 */ int* sort(int a[],int le...

冒泡排序(优化)

冒泡排序的效率不高,适合小量数据的排序,当数据较多的时候,建议使用其他排序算法,在另一篇博客中我已经介绍了冒泡排序冒泡排序,这篇博客将对冒泡排序进一步优化。 例如,有这样一个数组,int arr[]...

冒泡排序算法及其简单优化(基于Java)

冒泡排序算法通过多次比较和交换来实现排序,其流程如下: (1)对数组中的各数据,依次比较相邻两个元素的大小。 (2)如果前面的数据大于后面的数据,就交换这两个数据。通过第一轮的多次比较排序后,便...

冒泡排序的优化详解

冒泡排序算法的两种优化
  • Xiroy
  • Xiroy
  • 2017年03月13日 22:06
  • 85

冒泡排序算法的两种优化

冒泡排序(三种实现,两种优化) /* 首先,我们先介绍BubbleSort; 就是冒泡排序,冒泡排序大家应该最熟悉不过了; 冒泡排序算法的运作如下:(从后往前) 1. 比较相邻的元素。如果第一...
  • bitboss
  • bitboss
  • 2016年06月01日 21:22
  • 2513

优化冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:冒泡排序及其优化
举报原因:
原因补充:

(最多只允许输入30个字)