【算法】冒泡排序

来源:互联网 发布:数据科学网 编辑:程序博客网 时间:2024/06/05 16:04

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

      

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]);        }    }}


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

 

原创粉丝点击