冒泡排序名字也很形象,每次相邻数比较,如果数据较小就‘上浮’到下一个位置,一边对比筛选一边交换,每轮比较交换之后就有一个数据浮动到最后一个位置,顺序或者逆序排序 只需要改变大小值比较或者数组从后往前遍历
算法简单描述
第一轮:
第1个和第2个比较若第2个小则交换,第2个和第3个比较若第3个小则交换。。。。。第n-1个和第n个数比较,若第n个数小则交换。这样经过一轮遍历,最大的数载便利过程中被寻找出来,并‘浮动’到第n位了。
第二轮:
按照第一轮的方法便利1到n-1,第二大的数浮动到n-1。
。。。。。。。
最后一轮:
比较第1个和第2个数的大小,若第2个数小则交换。
代码实现:
/**
* 冒泡排序
* @param nums
*/
public static void soreBubble(int[] nums){
for(int i=0;i<nums.length-1;i++){
// 从后向前便利,将最小值冒泡到第一个
for(int j=nums.length-1;j>i;j--){
if(nums[j]<nums[j-1]){
int num = nums[j];
nums[j] = nums[j-1];
nums[j-1] = num;
}
}
}
}
时间复杂度
一共需要进行 (n-1)+(n-2)+.......+3+2+1 次处理,根据等差数列求和公式可以算出来:(a1+an)n/2 即 n(n-1)/2 ,化简得O(n的平方)