冒泡排序

  
  
冒泡排序算法运行起来非常慢,但是在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。

算法

从数组的最左边元素开始,比较相邻两个元素的大小,

如果左边元素大,则交换两个元素位置;

如果右边元素大,则什么也不做。

向右移一个位置,比较相邻两个元素的大小。

沿着这个数组,按照上面的方式比较下去,一直比较到数组的最右端。

这时,虽然没有把所以元素排序好,但是最大的元素已经安排在最右边位置了。

这个算法称为冒泡排序的原因:因为在算法执行的时候,最大的数据项总是“冒泡”到数组的顶端。

外部嵌套对已经拍好序的元素边界做控制,每一趟比较,都会增加一个拍好序的元素。 for(int out=nElements-1;out>0;out--) {//注意,数组是从下标0开始,10个元素的数组,只能到第8个下标和第9个下标元素比较 内部嵌套做比较和交换 for(int in=0;in<out;in++) { if(a[i]>a[i+1]){ swap } } }
package com.zcl.bubblesort;

class ArrayBub{
    private long[] a;
    private int nElems;
    
    public ArrayBub(int max) {
        this.a = new long[max];
        this.nElems = 0;
    }
    
    public void insert(long value) {
        a[nElems] = value;
        nElems++;
    }
    
    public void display(){
        for(int j=0;j<this.nElems;j++){
            System.out.print(a[j] + " ");
        }
    }
    //执行顺序是:初始化--判断--函数体——然后for循环的第3句--判断——函数体---for循环的第三句--判断……
    public void bubbleSort(){
        int out,in;
        for(out=nElems-1;out>0;out--){
            for(in=0;in<out;in++){
                if(a[in]>a[in+1]){
                    swap(in,in+1);
                }  
            }    
        }
    }
    
    private void swap(int one,int two) {
        long tem = a[one];
        a[one] = a[two];
        a[two] = tem;
    }
    
    public static void main(String[] args) {
        int maxSize = 100;
        ArrayBub arr = new ArrayBub(maxSize);
        
        arr.insert(77);
        arr.insert(88);
        arr.insert(33);
        arr.insert(11);
        arr.insert(99);
        arr.insert(66);
        arr.insert(22);
        arr.insert(44);
        arr.insert(55);
        
        arr.display();
        System.out.println("");
        arr.bubbleSort();
        arr.display();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值