您的位置:首页 > 其它

冒泡排序

2016-07-01 16:24 260 查看

思想

它是经过一系列的交换动作。首先第一个元素和第二个元素比较,如果第一个大,则二者交换,否则不交换;然后第二个元素和第三个元素交换,若果第二个元素大,则交换,否则不交换……直到按照这种方式进行下去,最终最大的那个元素被交换到最后一个位置,一趟冒泡排序完成。下一趟排序同样上面的操作,但是只交换到倒数第二个位置,这个位置是第二大的元素。直到一趟排序中没有交换元素时候排序结束。这样每次把一个元素找到对应位置,大的上浮,小的下浮。

步骤

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3.针对所有的元素重复以上的步骤,除了最后一个。

4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

例子



上面一个过程应该是一趟排序

动画



算法

package alg.sort;

public class BubbleSort {
public void sort(int[] A){
int n = A.length;
boolean flag = true;;
for(int i=n-1;i>=0;i--){
flag = true;
for(int j=0;j<i;j++){
if(A[j]>A[j+1]){
int tmp = A[j];
A[j] = A[j+1];
A[j+1] = tmp;
flag = false;
}
}
if(flag)
return;
}
}
public static void main(String[] args){
int[] A = new int[]{49,38,65,97,76,13,27,49};
Print.printArray(A);
BubbleSort bubbleSort = new BubbleSort();
bubbleSort.sort(A);
Print.printArray(A);
}
}


复杂度分析

(1)时间复杂度

最好情况:原始序列有序,不需要交换,时间复杂度O(n)O(n)

最坏情况:元素序列逆序,第i个元素回到排序位置应该交换i次,时间复杂度O(n2)O(n^2)

平均时间复杂度O(n2)O(n^2)

(2)空间复杂度

只用到常量的空间,空间复杂度O(1)O(1)

说明:

在一次排序后,可以使得最大元素回到排序后的位置

参考

1.《数据结构高分笔记》

2.链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: