您的位置:首页 > 编程语言 > Java开发

冒泡排序实现及优化(Java)

2017-03-09 20:03 435 查看
冒泡排序算法的运作如下:

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较


首先简单的第一种实现方法:

public static int[] bubbleSort1(int[] A, int n) {
int i,j;
for(i=0; i<n; i++){
for(j = 1 ; j<n-i;j++){
if (A[j-1]>A[j]){
swap(A,j-1,j);
}
}
}
return A;
}
private static void swap(int[] array ,int first ,int second){
int temp;
temp = array[first];
array[first] = array[second];
array[second] = temp;
}


对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。如果有一趟没有发生交换,说明排序已经完成。

public static int[] bubbleSort2(int[] A,int n){
int j;
boolean flag = true;
while(flag){
flag = false;
for(j=1; j<n; j++){
if(A[j-1]>A[
4000
j]){
swap(A,j-1,j);
flag = true;
}
}
n--;
}
return A;
}


继续优化,如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。

public static int[] bubbleSort3(int[] A, int n){
int j;
int flag = n;
while(flag>0){
flag = 0;
for(j=1; j<n; j++){
if(A[j-1]>A[j]){
swap(A,j-1,j);
flag = j;
}
}
}
return A;
}


排序算法的平均复杂度为O(N^2)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: