冒泡排序算法分析

[size=large][color=red]基本思想:[/color]在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。[/size]

在一般情况下,人们写出的冒泡排序算法是下面这种,但这种并不是正宗的冒泡排序

public int[] bubbleSort1(int[] bubbleSortArray){
int temp = 0;

for(int i = 0; i < bubbleSortArray.length-1; i++){
for(int j = 0; j < i; j++){
if(bubbleSortArray[j] < bubbleSortArray[i]){
temp = bubbleSortArray[j];
bubbleSortArray[j] = bubbleSortArray[i];
bubbleSortArray[i] = temp;
}
}
}

return bubbleSortArray;
}


以下才是正确的冒泡排序:

// BubbleSort
public int[] bubbleSort2(int[] bubbleSortArray){
int temp = 0;

for(int i = 0; i<bubbleSortArray.length-1; i++){
for(int j = 0; j < bubbleSortArray.length-1-i; j++){
if(bubbleSortArray[j] > bubbleSortArray[j+1]){
temp = bubbleSortArray[j];
bubbleSortArray[j] = bubbleSortArray[j+1];
bubbleSortArray[j+1] = temp;
}
}
}

return bubbleSortArray;
}


上面的冒泡排序还有优化的空间,在内层循环已经有序时,无需再循环下去了

public int[] bubbleSort3(int[] bubbleSortArray){
int temp = 0;
boolean needNextPass = true;
for(int i = 0; i<bubbleSortArray.length-1 && needNextPass; i++){
needNextPass = false;
for(int j = 0; j < bubbleSortArray.length-1-i; j++){
if(bubbleSortArray[j] > bubbleSortArray[j+1]){
temp = bubbleSortArray[j];
bubbleSortArray[j] = bubbleSortArray[j+1];
bubbleSortArray[j+1] = temp;
needNextPass = true;
}
}
}

return bubbleSortArray;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值