冒泡排序
冒泡排序
基本思想
- 将最大的向后放
- 遍历待排序序列从前向后,依次比较相邻的值,发现逆序则交换,使值大的向后排,双层for循环实现
实现步骤
- 从头部开始依次将数组相邻的两个数进行比较,若前面的数大于后面的数,则进行交换,
- 每遍历完成一趟就将最大的数移到了最后,小数就像鱼儿吐泡泡一样自动的浮向前面,
- 外层循环共遍历(数组的长度-1)次,每循环完成一次确定了一个最大值,
- 故内层循环每次遍历次数不同(数组长度-1-外层循环遍历的次数)则完成排序。
代码实现
public int[] sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j< arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
arr[j]=arr[j]^arr[j+1];
arr[j+1]=arr[j+1]^arr[j];
arr[j]=arr[j]^arr[j+1];
}
}
}
return arr;
}
复杂度与稳定性
稳定性:若数组中出现重复元素,若排序后重复元素还按照源数组中的先后顺序排列,则称之为稳定,否则为不稳定
in-place:不占用额外内存
n:数据规模
排序算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 排序方式 | 稳定性 |
---|---|---|---|---|---|---|
冒泡排序 | O(n^2) | O(n ) | O(n^2) | O(1) | In-place | 稳定 |