冒泡排序(Bubble Sort)顾名思义它是一种排序,而且要冒泡。
那怎么冒泡呢。冒泡[排序算法的原理如下:
Step 1、从数组的第一个元素开始向后,让相邻的两个元素进行比较如果前一个比后一个大就进行交换。(这样一轮之后数组中最大的值就会跑到数组的最后面,好了现在数组最后面的数字已经排完序了,就像水里的泡泡一样冒出来消失不用去管他)
Step 2、重复上面步骤一直到数组排列完成。
下面实现Step 1
int a[]={7,2,4,8,6,1,3,5};//准备一个乱序数组
int temp=0;//准备一个交换用的临时变量
//开始交换
for (int k=0;k<a.length-1;k++){//与后面的数字交换所以是n-1
if (a[k]>a[k+1]){
temp=a[k+1];
a[k+1]=a[k];
a[k]=temp;
}
}
for (int c:a){
System.out.println(c);
}
//结果是2 4 7 6 1 3 5 8
接下来做Step 2
int a[]={7,2,4,8,6,1,3,5};
int temp=0;//临时变量
for (int j=0;j<a.length-1;j++){//由于内层循环完成一次就是冒泡出一位排完序的数所以只需要做n-1次就可以完成排序
for (int k=0;k<a.length-1-j;k++){
if (a[k]>a[k+1]){
temp=a[k+1];
a[k+1]=a[k];
a[k]=temp;
}
}
}
for (int c:a){//for each
System.out.println(c);
}
//结果是12345678
该算法可以进行进一步优化。因为在数组无需排序时,内层循环的交换并不发生,所以可以设置一个标志位来测试是否还有排序必要。
int a[]={5,1,2,3,4};
int temp=0;
int count=0;
boolean flag=false;
for (int j=0;j<a.length-1;j++){
flag=false;
for (int k=0;k<a.length-1-j;k++){
if (a[k]>a[k+1]){
temp=a[k+1];
a[k+1]=a[k];
a[k]=temp;
flag=true;
}
count++;
}
if(!flag)
break;
}
for (int c:a){
System.out.println(c);
}
System.out.println(count);