java图形化冒泡排序_Java实现冒泡排序—详细解析优化版

# Java实现冒泡排序—详细解析优化版冒泡

思想:冒泡排序是一种简单的排序算法。它***重复地走访过要排序的数列***,一次比较两个相邻元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是***重复地进行***直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

时间复杂度:最优时间复杂度,最差时间复杂度分析和平均时间复杂度均为 O(n^2),主要的推算公式示通过等差数列s=n(n-1)/2;

空间复杂度:空间复杂度就是在交换元素时那个临时变量所占的内存空间;

最优的空间复杂度就是开始元素顺序已经排好了,则空间复杂度为:0;

最差的空间复杂度就是开始元素逆序排序了,则空间复杂度为:O(n);

平均的空间复杂度为:O(1);

代码块

public void getResult(int[] arr){

boolean flag;

for(int i=0;iarr[j+1])

{

int temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

flag=true;

}

}

if(flag==false)

{

break;

}

}

}

结果

d6bfd37eb4aa03c9f00f9e71709118d2.png

分析:

1. 假设初始化数组为int[] array={33,27,56,98,70}

当外循环i=0时,内循环j=0时 此时 array={27,33,56,98,70}

当外循环i=0时,内循环j=3时 此时array={27,33,56,70,98}已经完全排好序;比一起一般的排序方法本程序增加了一个标志位boolean flag,这样就大大减少循环次数,提高程序执行效率;

2.1.当i=0的时候内循环j经过4次循环,已经排好序;当i=时,标志位flag重置为false,但内循环已经不需要再次排序换位了,所以直接break 跳出;

2.冒泡排序思路(第一层)是先从第一个数开始冒泡(对应数组中的a[0]的值),然后与第二个数进行比较(对应数组中的a[1]的值)。

a.假如a[0]>a[1],则a[0]与a[1]交换位置。小的值放在前面,大的值放在后面。也就说a[1]的位置现在放在第一位了,而a[0]的放在在第二位,但是a[0]继续与后面的数值进行比较。道理和a[0]与a[1]的过程一样。直到找出该数组的最大的值。并把这个最大值放在最后面的位置。第一层排序结束。

b.假如a[0]

3.难点:1.外循环控制循环的次数,若初始化以0开始就至n-1;若初始化以1开始就至n;建议一般初始化以0开始,因为数组的下标就是以0开始;

2.内循环控制交换的次数,当i=0第一次循环结束后就把最大那位数已经冒出来,所以当i=1时,内循环需要n-i-1,即不用和最大那位数重复比较;随着i值的增大,循环的次数越来越少;

算法初学者,以上分析参考了网上一些博客,根据自己总结写出来的,如有异议请勿喷,欢迎指正;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值