排序思想
通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
代码实现:
@Test
public void Bubbling(){
int arr[]={4,2,7,5,8,9,6};
int temp=0;
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
冒泡优化
思想:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行)
代码实现:
@Test
public void Bubbling1(){
int[] arr={4,2,7,5,8,9,6};
//定义一个变量表示是否进行过交换
boolean flag=false;
int temp=0;
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
flag=true;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println("第"+(i+1)+"趟排序");
System.out.println(Arrays.toString(arr));
//在下一趟排序中,一次交换都没有发生过
if(flag==false){
break;
}else {
//重置flag,进行下次交换
flag=false;
}
}
}