冒泡排序
- 时间复杂度(平均、最坏) O(n^2),最好为O(n)
- 空间复杂度为O(n)
- 稳定性:稳定
算法解析:
- 该算法是相邻两两做比较
- 外层循环需要做n-1次
- 内层循环需要做n-1-i次,内层循环的次数每次都会减去外层循环的层,因为前层已经排序OK
动画演示:
bubbleSort
C实现
int *bubbleSort(int arr[],int count) {
int tmp;
for (int i = 0; i<count-1; i++) {
for (int j = 0; j<count-1-i; j++) {
if (arr[j] > arr[j+1]) {
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
return arr;
}
oc实现
- (NSArray *)bubbleSort:(NSMutableArray *)arr {
NSNumber *tmp = nil;
for (int i = 0; i<arr.count-1; i++) {
for (int j = 0; j<arr.count-1-i; j++) {
if ([arr[j] intValue] > [arr[j+1] intValue]) {
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
return arr.copy;
}
Swift 实现
func bubble(_ arr:Array<Int>) -> Array<Int> {
var tmpArr = arr
var tmp = 0
let count = tmpArr.count
for i in 0..<count-1 {
for j in 0..<count-1-i {
if tmpArr[j] > tmpArr[j+1] {
tmp = tmpArr[j]
tmpArr[j] = tmpArr[j+1]
tmpArr[j+1] = tmp
}
}
}
return tmpArr
}
以下代码来源于网络,未验证
js 实现
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) { // 相邻元素两两对比
var temp = arr[j+1]; // 元素交换
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
Python 代码实现
def bubbleSort(arr):
for i in range(1, len(arr)):
for j in range(0, len(arr)-i):
if arr[j] > arr[j+1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
Go 代码实现
func bubbleSort(arr []int) []int {
length := len(arr)
for i := 0; i < length; i++ {
for j := 0; j < length-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
return arr
}
Java 代码实现
public class BubbleSort implements IArraySort {
@Override
public int[] sort(int[] sourceArray) throws Exception {
// 对 arr 进行拷贝,不改变参数内容
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
for (int i = 1; i < arr.length; i++) {
// 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
boolean flag = true;
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = false;
}
}
if (flag) {
break;
}
}
return arr;
}
}
网友评论