冒泡排序

来源:互联网 发布:java企业微信发送消息 编辑:程序博客网 时间:2024/06/03 20:32
冒泡排序算法运行起来非常慢,但是在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。

算法:

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

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

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

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

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

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

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

外部嵌套对已经拍好序的元素边界做控制,每一趟比较,都会增加一个拍好序的元素。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
原创粉丝点击