数据结构排序系列详解之三 冒泡排序

Posted on 2013-07-28 20:33  冰天雪域  阅读(285)  评论(0编辑  收藏  举报

前面两篇博客讲述的排序算法都是基于插入类的排序,这篇文章开始介绍交换类的排序算法,即:冒泡排序、快速排序(冒泡排序的改进)。

交换类的算法:通过交换逆序元素进行排序的方法。

冒泡排序:反复扫描待排序记录序列,在扫描的过程中,顺次比较相邻的两个元素的大小,若逆序就交换位置。

算法实现代码如下:

 

package exp_sort;

public class BubbleSort {

	public static void bubble(int array[]) {

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

		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + " ");
		}
		System.out.println("\n");

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int array[] = { 38, 62, 35, 77, 55, 14, 35, 98 };
		bubble(array);
	}

}


算法分析:最好的情况是,需要排序的初始状态是正序排列的,则一趟扫描即可完成,此时时间复杂度是O(n);最坏情况是,需要排序的初始状态是反序的,则需要n-1趟扫描,此时时间复杂度是 O(n^2),空间复杂度是 O(1);该算法是一种 稳定的排序方法。

 

 

Copyright © 2024 冰天雪域
Powered by .NET 9.0 on Kubernetes