排序算法(三)——冒泡排序

排序

冒泡排序

主要思想: 对无序区从前向后依次将相邻记录进行比较,若反序则交换,从而使的小的记录向前移,大的记录向后移,直到没有反序。

排序的具体过程: 

(1)将整个待排序列划分成有序区和无序区,初始化时有序区为空,无序区包含所有序列(括号中的记录)。

(2)对无序区从前向后一次将相邻记录的关键码进行比较,若反序则交换,从而使得关键码小的记录像前移动,关键码大的记录向后移动(就像水中的气泡,体积大的先浮上来)。

(3)重复第二步,直到无序区中没有反序为止。

例如:

* 初始值为 [ 5, 69, 81, 12, 38, 53, 98]

* 第一趟: [ 5, 69, 12, 38, 53, 81] 98 // 括号内为无序区,括号后面为有序区

* 第二趟: [ 5, 12, 38, 53, 69] 81, 98

* 第三趟: [ 5, 12, 38, 53] 69, 81, 98

* 第四趟: [ 5, 12, 38] 53, 69, 81, 98          

每趟从第一个数开始,依次与后面的数进行比较,若前面比后面的大,就交换直到进入有序区即停止。

冒泡排序

	/**
	 * 交换排序: 冒泡排序
	 */
	@Override
	public void bubbleSort(T[] t) {
		for(int i = 0; i < t.length; i++){
			for(int j = 0; j < t.length - i -1; j++){
				if(compare(t[j + 1], t[j])){
					T tmp = t[j];
					t[j] = t[j + 1];    
					t[j + 1] = tmp;
				}
			}
		}
		System.out.println("冒泡排序:");
		print(t);
	}
这里的compare 、 print 方法将在讲解完全部排序介绍,这里仍然才用泛型。
性能分析:冒泡排序的执行时间取决于排序的趟数。

(1)在最好情况下,待排序列为正序,算法只执行一趟,进行n-1次比较,不需要移动记录,时间复杂度为:O(N)

(2)在最坏情况下,待排序列为反序,每趟在无序区中只有的第一个最大记录被交换到最终的位置,算法执行n-1趟,第i趟执行n-i 次比较和交换,所以时间复杂度为:O(N*N)

(3) 平均情况下,冒泡排序的时间复杂度与最坏情况同数量级。所以冒泡排序的时间复杂度为:O(N*N)

稳定性:若两个记录A和B值相等,但是排序后A、B的先后次序保持不变,则这种排序是稳定的,否则就是不稳定。

冒泡排序是一种稳定的排序算法。

总结:

 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。它适合数据规模很小的时候,而且它的效率也比较低。但是学习排序算法还是值得学习的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值