【排序算法】冒泡排序

losetowin 发布于:2017-2-3 19:44 分类:Java  有 2107 人浏览,获得评论 0 条 标签: 冒泡排序 排序算法 

本文地址:http://www.dutycode.com/paixusuanfa_maopaopaixu.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

最简单的一个排序算法

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

举个例子:
     比如有这样一组数字:
     10,9,15, 20,19,18, 38
     第一次排序得到结果: 9,10,15, 19, 18, 20, 38
     第二次排序得到结果: 9,10,15, 18, 19, 20,38
     这个数据比较简单,到此为止就完成了正确排序,但是在冒泡排序中,会循环7次以上过程。

代码实现: 
/**
	 * 算法:
	 * 1、比较相邻两个元素,如果第一个比第二个大,则交换他们两个
	 * 2、对每一对相邻元素做同样的动作,从开始第一对到最后一对,这一步完成之后,最后的元素会是最大值。
	 * 3、针对所有的元素重复上面的步骤,除了最后一个。
	 * 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
	 * 
	 * 时间复杂度:最坏 O(n²) 最优 O(n) 平均O(n²)
	 * 空间复杂度 总共 O(n),需要辅助空间 O(1)
	 * @Title: bubbleSort   
	 * @param numbers
	 * @return
	 * @author: zzh    
	 * @date: 2017年2月3日 下午6:11:31       
	 * @version: v1.0.0
	 *
	 */
	public static int[] bubbleSort(int[] numbers) {
		int tmp = 0;
		int length = numbers.length;
		for (int i = 0; i < length - 1; i++) {
			for (int j = 0; j < (length - 1 - i); j++) {
				tmp = numbers[j];
				if (numbers[j] > numbers[j+1]){
					numbers[j] = numbers[j+1];
					numbers[j+1] = tmp;
				}
			}
		}
		
		return numbers;
	}

测试代码:

public static void main(String[] args) {
		int[] numbers = {10,9,15, 20,19,18, 38};
		bubbleSort(numbers);
		for(int t : numbers) {
			System.out.print(t +",");
		}
	}


版权所有:《攀爬蜗牛》 => 《【排序算法】冒泡排序
本文地址:https://www.dutycode.com/paixusuanfa_maopaopaixu.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。