排序算法之冒泡排序

学习《轻松学算法》之冒泡排序

概念引入:

    对排序的数字,定好排序的方向,假如是从大到小排序,每一轮 两两相比较,把小的数字都靠到后面。


原理:

   假设我们要从小到大排序一个数组,我们需要将大的元素往后移。

   1 i=0

   2 开始比较相邻的元素,如果前面的元素比后面的元素大,则交换,否则不做,除了已经排好的元素。

   3 数组下标后移一位 i++

   4 重复2,直到没有可以比较的数字


例子:

    待排序:4,5,2,7,4,3 

   第一轮:4,2,5,4,3,7

   第二轮:2,4,4,3,5,7

   第三轮:2,4,3,4,5,7

   第四轮:2,3,4,4,5,7

   第五轮:2,3,4,4,5,7



package com.xxc.algorithm.bubblesort;



public class BubbleSort {
	private int[] array;
	public BubbleSort(int[] array) {
		this.array = array;
	}
	
	/**
	 * 从大到小
	 */
	public void sort() {
		int length = array.length;
		if (length > 0) {
			// 从前往后将小的往后移
			for(int i = 0;i<length;i++) {  //从头遍历到尾
				for(int j=0;j<length-i-1;j++) { //排除已经排序的数字
					if(array[j]<array[j+1]) {
						int temp = array[j+1];
						array[j+1] = array[j];
						array[j] = temp;						
					}
				}	
			}
			
		}
	}
	
	/**
	 * 从小到大
	 */
	public void sort2() {
		int length = array.length;
		if (length > 0) {
			// 从前往后将大的往后移
			for(int i = 0;i<length;i++) {
				for(int j=0;j<length-i-1;j++) {
					if(array[j]>array[j+1]) {
						int temp = array[j+1];
						array[j+1] = array[j];
						array[j] = temp;						
					}
				}	
			}
			
		}
	}
	
	public void print() {
		System.out.println("---");
		for(int i = 0;i<array.length;i++) {		
			System.out.println(array[i]);
			
		}
	}
	
}

package com.xxc.algorithm.bubblesort;



public class SortTest {

	
		public static void main(String[] args) {
			testBubbleSort();

		}
		
		public static void testBubbleSort() {
			int[] array = {5,9,1,9,5,3,7,6,1};
			BubbleSort bubbleSort = new BubbleSort(array);
			bubbleSort.sort();
			bubbleSort.print();
			bubbleSort.sort2();
			bubbleSort.print();

	}

}


特点:

   每轮排序中,会使一个元素排到一头,需要n-1轮排序,每轮排序需要两两相邻的数进行比较。最坏的情况,时间复杂度O(n2),最好O(n),平均O(n2)

    空间复杂度O(1)

   稳定,两个相邻元素相同时,不会进行交换。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值