冒泡排序算法运行起来非常慢,但是在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。
算法:
从数组的最左边元素开始,比较相邻两个元素的大小,
如果左边元素大,则交换两个元素位置;
如果右边元素大,则什么也不做。
向右移一个位置,比较相邻两个元素的大小。
沿着这个数组,按照上面的方式比较下去,一直比较到数组的最右端。
这时,虽然没有把所以元素排序好,但是最大的元素已经安排在最右边位置了。
这个算法称为冒泡排序的原因:因为在算法执行的时候,最大的数据项总是“冒泡”到数组的顶端。
外部嵌套对已经拍好序的元素边界做控制,每一趟比较,都会增加一个拍好序的元素。
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();
}
}
冒泡排序
最新推荐文章于 2023-02-18 14:10:31 发布