冒泡排序
动图
算法描述
- 依次比较数组中相邻两个元素大小,若 a[j] > a[j+1],则交换两个元素,两两都比较一遍称为一轮冒泡,结果是让最大的元素排至最后
- 重复以上步骤,直到整个数组有序
最坏时间复杂度:O(n²)
稳定性:稳定
算法实现
public static void bubbleSort(Integer[] nums){
//最后一次交换的位置
Integer lastExchangeIndex = nums.length - 1;
for (int i = 0; i < nums.length; i++) {
//记录是否交换
Boolean exchange = false;
for (int j = 0; j < lastExchangeIndex; j++){
if(nums[j] > nums[j + 1]){
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
//发生交换设置为true
exchange = true;
}
}
//如果没有发生交换证明数组已经有序直接返回
if(exchange == false){
return;
}
//每一轮排序好一个数
lastExchangeIndex--;
}
}