冒泡排序示例

原创 2017年05月22日 23:28:05

一、概念与算法思想
冒泡排序形象的比喻为锅中的开水沸腾,锅中的气泡由锅底向上冒出,气泡由小变大。冒泡排序法又称为交换排序法,由第一个元素开始,比较相邻元素的大小。
二、优缺点
最坏情况,比较n(n-1)/2,时间复杂度为O(n^2),最好情况是一次就完成排序,时间复杂度为O(n)。
* 只需要一个额外的空间,所以空间复杂度为最佳
* 此排序法适用于数据量小或者有部分数据已经排序的情况下。
Import java.demo.bubblesort;
/*
*冒泡排序算法
*/这里写代码片

public class CHO8_01 {
    public static void main(String args[]){
        int data[]=new int[]{8,5,3,4,1,7};      
        int temp=0;
        System.out.println("冒泡排序法:");
        System.out.println("请输入原始数据:");
        for(int i=0;i<6;i++){
            System.out.println(data[i]+"");
        }
        for(int i=5;i>0;i--){ //扫描次数
            for(int j=0;j<i;j++){  //交换次数
//              比较相邻两数的大小,如第一个数较大则交换
                if(data[j]>data[j+1]){
                    temp=data[j];
                    data[j]=data[j+1];
                    data[j+1]=temp;

                }
            }
            System.out.println("第"+(6-i)+"的排序结果");
            for(int j=0;j<6;j++){
                System.out.println(data[j]+"");
            }
            System.out.println("\n");


        }
        System.out.println("排序后的结果为:");
        for(int i=0;i<6;i++){
            System.out.println(data[i]+"");
        }
        System.out.println("\n");
    }

}

*/
/由以上的程序执行可知,不管程序是否执行完数据的排序,都要进行 n(n-1)/2次,我们可以增加适当的判断条件经行
* 程序的优化。
* 下面是改良后的冒牌排序法
*/

public class CHO8_01 extends Object
{
    int data[]=new int[]{4,6,2,7,8,9};

    public static void main(String args[]){
        long startTime=System.currentTimeMillis();//计算执行时间

        CHO8_01 text=new CHO8_01();
        int i,j,temp;
        System.out.println("改良后的冒泡排序法:");
        System.out.println("请输入数据:");
        text.showdata();
        text.bubble();
        long endTime=System.currentTimeMillis();
        System.out.println("程序运行时间:"+(endTime-startTime)+"ms");

    }

    /**
     * showdata()方法打印出数据
     */
    private void showdata() {
        // TODO Auto-generated method stub
        for(int i=0;i<6;i++){
            System.out.println(data[i]+"");
        }
        System.out.println("\n");
    }

    /**
     * sort()方法进行排序
     */
    private void bubble() {
        // TODO Auto-generated method stub

        int i,j,flag,temp;
        for(i=5;i>0;i--){
            flag=0;//flag用来判断是否有交换
            for(j=0;j<i;j++){
                if(data[j]>data[j+1]){
                    temp=data[j+1];
                    data[j+1]=data[j];
                    data[j]=temp;
                    flag++;   //如果有交换则flag不为零
                }
            }
            if(flag==0){ //flag为零则不进行交换
                break;
            }
            System.out.println("第"+(6-i)+"此排序结果");
            for(j=0;j<6;j++){
                System.out.println(data[j]+"");
            }
            System.out.println("\n");
        }
        System.out.println("排序后的结果为:");
        showdata();     
    }   
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35995514/article/details/72633110
收藏助手
不良信息举报
您举报文章:冒泡排序示例
举报原因:
原因补充:

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