简单排序算法时间空间复杂度分析及应用(1)-冒泡排序

                 简单排序算法时间空间复杂度分析及应用(1)-冒泡排序 

冒泡排序算法,我上大学一开始接触的算法就是冒泡排序算法,这是算法入门知识,通过冒泡排序算法我接触了循环的概念,循环有开始节点和结束节点,并且算法会经历所有的中间节点(包括始节点和终节点),走过节点的顺序方向从始节点到终节点,算法会比较节点前后的节点,然后根据节点的值大小和排序顺序来决定这个节点前后节点是否交换,当循环终结后,就能得到排序想要的结果。

冒泡算法其实在军训站立的时候由高到低排列得到了使用。高的往最右边靠,虽然只有移动动作,但是比较过程已经在我们自己的脑内发生了。

  冒泡排序其实是有两个循环嵌套在一起,外循环始点是其中一个端节点,终点是另外一个端节点,所有已经经历的节点都是最后已经确定排序位置的节点数据,内循环的方向是和外循环方向相反的,内循环的始点是外循环的终点,内循环的终点是外循环的正在经历的中间节点。循环图:

循环中会比较此节点和下一个节点,如果满足交换条件就交换两个节点的值,不满足就不交换。交换节点值会消耗时间,而空间只需要一个节点空间就行。因此时间复杂度对于冒泡排序是该算法的效率判断因素。时间复杂度最低为所有的节点都不会交换值,最高为所有的节点都会交换值。所有节点都不交换值的情况是:增序排序且数据都是增序;降序排序且数据都是降序。相反,所有节点都交换值的情况是:增序排序且数据都是降序;降序排序且数据都是增序。前者时间复杂度为O(0),后者时间复杂度为O(n的平方)。


	冒泡排序java环境实现:
	/*
	 * 冒泡排序
	 * bubble sort
	 * 冒泡排序算法	时间复杂度O(n平方),最好的时间复杂度O(n)
	 * bubble sort 排序中有元素比较,元素移动两种类型动作。
	 * 其中元素比较的次数是固定的:n(n-1)/2次;元素移动次数最少0次,最多(n-1)n/2次	
	 * @param sortOrder 为true是增序,为false时降序
	 */
	
	public static  void bubbleSort(boolean sortOrder){
			
		int  z , max , min;
		for(int m = array.length - 1 ; m > 0  ; -- m)
			for(int n = 0 ; n < m ; ++ n)
			{
				max = array[n] >= array[n+1] ? array[n]:array[n+1];
				min = array[n] < array[n+1] ? array[n]:array[n+1];
				if((sortOrder&&min == array[n+1])||(!sortOrder && max == array[n+1]))
				{
					z = array[n+1];
					array[n+1] = array[n];
					array[n] = z;
				}
			}
	}

冒泡排序结构图:

在之后的基本排序算法中的分析及应用文章中我都会使用下面几个概念:

1.内外循环,循环起点,循环终点,循环方向,确定区域,待确定区域,确定节点,待确定节点。下一章将涉及其他概念

确定区域:已经排序的数组部分数据范围。

待确定区域:和确定区域相反,是还未排好序的数组部分数据范围

确定节点:所有确定节点集合为确定区域

待确定节点:集合为待确定区域

循环节点:循环正在循环的节点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特科技软件开发工作室

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值