男儿欲遂平生志,五经勤向窗前读。

Talk is cheap,show me the code

【算法】冒泡排序

           冒泡排序是一个常见的排序算法,它的思想就是重复交换相邻的两个元素,如果这两个元素反序就交换他们。每次从第一个元素到最后一个待排序的元素,每趟冒泡我们都会把最大(或者最小)的元素找到。

      

public class BubbleSort {
    public static void bubble(int a[],int n) {
        //冒泡排序,每次将最大的冒到后面
        for (int i = 0; i < n - 1; ++i) {
            //这个循环就是从第一个开始,往后冒
            for (int j = 0; j < n - i - 1; ++j) {
                if (a[j] > a[j + 1]) {
                    int tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
        }
    }
    //改进后的冒泡排序----加入判断如果初始
    static void Bubble_1 ( int r[], int n) {
        //对冒泡排序常见的改进方法是加入一标志性变量exchange,
        // 用于标志某一趟排序过程中是否有数据交换,
        // 如果进行某一趟排序时并没有进行数据交换,
        // 则说明数据已经按要求排列好,
        // 可立即结束排序,避免不必要的比较过程
        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; //为下一趟排序作准备
        }
    }

    //也可以在一次冒泡过程中,选出最大的值和最小的值。
    // 这样可以将排序趟数减少一半
    public static 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) {
        int a[]={3,12,44,5,53,61,67,84,7,88,90};
        bubble(a,a.length);
        for(int i=0;i<a.length;i++)
        {
            System.out.println(a[i]);
        }
    }
}


             以上就是对冒泡算法的代码总结。和直接插入排序对比,可以发现直接插入排序,是从待排序中拿出最大(或者最小的数)然后插入到已经排序好的序列中,这个的插入跳跃性比较大,它的交换则是从待排序中插入到已经排序好的序列中,而冒泡排序就是相邻两个元素的交换,如果反序则交换,否则就不交换。

 

阅读更多
版权声明:那些你不愿意做的事情才能让你真正成长 https://blog.csdn.net/u012331102/article/details/77602852
个人分类: ---------【算法】
想对作者说点什么? 我来说一句

冒泡排序

2011年11月25日 297B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭