转自:http://blog.youkuaiyun.com/sxb0841901116/article/details/20670015
一、算法思想
冒泡排序是一种简单的交换类排序。基本思路就是从头开始遍历元素,在扫描的过程中依次对相邻的元素进行比较,每次将关键值大的放在后面。这样一遍结束后,最大的那个元素就在最后面。下次遍历元素时候从第一个到倒数第二个,依次这样下去。如果对于有N个关键字的元素,只需要执行N-1 就可以排序。由于每次都是将小的值浮到上面,大值沉到下面,故称冒泡排序。
一般地,对n个元素进行冒泡排序,总共需要进行n-1趟。第1趟需要比较n-1次,第2趟需要比较n-2次,......第i趟需要比较n-i次。
二、性能分型
时间复杂度 O(n2) 稳定性:稳定
这里补充一下稳定性概念: 在排序的记录序列中,对于相同关键字的记录,经过排序后相对次序保持不变。
比如排序(2,3,1(第一个),1(第二个),5,6)不稳定的排序,可能会排出(1(第二个),1(第一个),2,3,5,6);
三、算法描述
package com.albertshao.algorith.study;
public class BubbleSort {
public static void main(String[] args) {
//int[] array = {3,1,6,2,9,0,7,4,5};
int[] array = {9,8,7,6,5,4,3,2,1};
array = bubbleSort(array);
for (int i = 0; i < array.length; i++) {
}
}
public static int[] bubbleSort(int[] array) {
if(array.length == 0) {
return null;
} else {
for (int i = 0; i < array.length -1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
System.out.print("第" + (i+1) +"趟: ");
for (int j = 0; j < array.length; j++) {
System.out.print(array[j]);
}
System.out.println();
}
}
return array;
}
}
运行结果:
第1趟: 876543219
第2趟: 765432189
第3趟: 654321789
第4趟: 543216789
第5趟: 432156789
第6趟: 321456789
第7趟: 213456789
第8趟: 123456789
转自:http://blog.youkuaiyun.com/sxb0841901116/article/details/20670015