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

数据结构之冒泡排序 java_java

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

数据结构之冒泡排序 java_数据结构_02


移动次数:

数据结构之冒泡排序 java_java_03

代码如下:

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);
}

}

数据结构之冒泡排序 java_System_04

@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);
}