数据结构之冒泡排序 java

冒泡排序算法分析:
设待排序记录序列中的记录个数为n
一般地,第i趟起泡排序从1到n-i+1
依次比较相邻两个记录的关键字,如果发生逆序,则交换之。

这里写图片描述

算法分析:
时间复杂度:
◎最好情况(正序)
比较次数:n-1 (有优化时)
移动次数:0
◎最坏情况(逆序)
比较次数:

这里写图片描述
移动次数:
这里写图片描述

代码如下:

import org.junit.Test;
public class BubbleSort {
    public void swap(int a[],int x,int y){
        int temp=a[x];
        a[x]=a[y];
        a[y]=temp;
    }
    /*元素交换---反模式:
     * 基本数据类型为参数,是值传递,内部更改无效的。
     * 只有引用传递内部更改才有效。
     */
    public void swap(int x,int y){
        int temp=x;
        x=y;
        y=temp;
    }
    @Test 
    public void demo0(){
        int x=10;
        int y=20;
        swap(x,y);
        System.out.println(x+","+y);//基本数据类型为参数的swap,,无法实现数据交换

        int a[] = {21,25,49,25,16,8};
        swap(a,0,1);
        print(a);
    }
    public void print(int a[]){
        for(int x:a){
            System.out.print(x+" ");
        }
        System.out.println();
    }
    /**************冒泡排序****************/
    @Test
    public void bubbleSort(){
        int a[] = {21,25,49,25,16,8};
        for(int i=0;i<a.length-1;i++){//趟数--n-1趟,每趟冒一个泡
            for(int j=0;j<a.length-i-1;j++){
                if(a[j]>a[j+1]){
                    swap(a,j,j+1);
                }
            }
        }
        print(a);
    }

}

这里写图片描述

@Test //1.2 优化的冒泡排序: 优化的基本思想是当出现某一趟不存在逆序情况,则后面的趟数就不进行了,因为已经有序---一般用于大数据量
    public void bubbleSort2() {
        long t1 = System.currentTimeMillis();

        int a[] = {21,25,49,25,16,8,23,45,-3,4};
        for(int i=0;i<a.length-1;i++){
            boolean isOk=true;
            for(int j=0;j<a.length-i-1;j++){
                if(a[j]>a[j+1]){//若逆序则交换
                    swap(a,j,j+1);
                    isOk=false;
                }
            }
            if(isOk)
                break;
        }
        print(a);

        long t2 = System.currentTimeMillis();

        System.out.println(t2+","+t1);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值