java bubble sort_冒泡排序 bubble sort

冒泡排序

时间复杂度(平均、最坏) O(n^2),最好为O(n)

空间复杂度为O(n)

稳定性:稳定

算法解析:

该算法是相邻两两做比较

外层循环需要做n-1次

内层循环需要做n-1-i次,内层循环的次数每次都会减去外层循环的层,因为前层已经排序OK

动画演示:

82303d3f7080

bubbleSort

C实现

int *bubbleSort(int arr[],int count) {

int tmp;

for (int i = 0; i

for (int j = 0; 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

for (int j = 0; 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) -> Array {

var tmpArr = arr

var tmp = 0

let count = tmpArr.count

for i in 0..

for j in 0..

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值