冒泡排序
大致思路:(以升序为例)
例如:2 5 7 3 5 3 8 1
- 第一轮:前一个数与后一个数比较,将最大的元素冒泡出来
- 第二轮:重复第一轮的比较过程,将第二的数字冒泡出来
3.第三轮:重复第一轮,将剩余数字中的最大的数字冒泡出来
4.继续重复,直至排序完成。
我们用i控制轮数,用j遍历数组,可利用如下代码实现:
class BubbleSort{
public static void main(String[] args){
int[] list={2,5,7,3,5,3,8,1};//给定一个测试的乱序数字数组
bubbleSort(list);//排序
}
public static void bubbleSort(int[] list){
int temp=0;//定义一个中间变量
for(int i=0;i<list.length-1;i++){//遍历轮数
for(int j=0;j<list.length-i-1;j++){//排序,已经排序好的不需要再遍历所以-i
if(list[j]>list[j+1]){//如果后边比前边大就互换位置,只是前者与后者两两比较
temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
}
}
System.out.print("第"+(i+1)+"轮排序结果:");
for(int k=0;k<list.length;k++){//把每轮排序好的数组打印看过程
System.out.print(list[k]);
}
System.out.println();//每一轮排序完换行
}
}
}
运行效果图:
时间复杂度:O(n^2),但稳定性良好,因为重复的数字没有改变原来的顺序。