冒泡排序
冒泡排序(Bubble Sorting)基本思想:对要排序的序列从前向后(从下标较小的元素开始),依次比较相邻元素的大小,发现逆序则交换,使值较大的元素从前向后移动。
举一个例子
原始数组:1,-3,5,0
第一趟排序
(1)-3,1,5,0
(2)-3,1,5,0
(3)-3,1,0,5
第二趟排序
(1)-3,1,0,5
(2)-3,0,1,5
第三趟排序
(1)-3,0,1,5
小结:一共进行数组大小减一次大的循环;在某趟排序时没有发生一次交换,可提前结束排序。(优化)
时间复杂度为O(n^2)。
基本版代码
package bubble_sort;
import java.util.Arrays;
public class bubble {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int array[]= {3,9,-1,10,-2};
int temp=0;
for(int i=0;i<array.length-1;i++) {
for(int j=0;j<array.length-1-i;j++)
{
if(array[j]>array[j+1])
{
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
System.out.println("第"+i+"趟排序后的数组为:"+Arrays.toString(array));
}
}
}
优化后
package bubble_sort;
import java.util.Arrays;
public class bubble {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int array[]= {3,9,-1,10,20};
int temp=0;
boolean flag=false;//表示是否进行过交换
for(int i=0;i<array.length-1;i++) {
for(int j=0;j<array.length-1-i;j++)
{
if(array[j]>array[j+1])
{
flag=true;
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
System.out.println("第"+(i+1)+"趟排序后的数组为:"+Arrays.toString(array));
if(!flag)
{
break;//在一趟排序中,没有发生过交换
}
else
{
flag=false;//重置flag,进行下一趟排序的判断
}
}
}
}