数据结构与算法-冒泡排序
admin
2024-01-22 20:22:04
0

什么是冒泡排序
冒泡排序是一种计算机领域较为简单的一种排序算法,因为排序的元素由小到大慢慢比较而浮现出来就如同气泡上升浮出一样,故称之为冒泡排序。

算法原理
1、相邻元素两两比较,符合预期则进行数据交换;
2、每次排序后的数据都会倾向一边,则下次排序会减少循环次数;
3、比较的次数为数组长度 N-1 次,换言之就是长度为N的数组我们只需要交换N-1次即可获得最终结果。

时间复杂度
1、如果数据本身有序,则最理想的复杂度为 O(N)
2、如果数据本身全部乱序,我们需要双层循环全部数据,则最坏的复杂度为O(N2)
综合以上原因冒泡排序的时间复杂度为 O(N2)

算法稳定性
由于在算法过程中两两比较如果数据相等不会交换数据,故在比较过程中没有相同元素次序改变的情况则该算法稳定。

小试牛刀
1、创建算法类并提供升序、降序两种排序算法

/*** 冒泡排序算法* @author senfel* @version 1.0* @date 2022/11/16 10:59*/
@Slf4j
public class BubbleSort {/*** 升序* @param array* @author senfel* @date 2022/11/16 11:01* @return void*/public static void sort(int[] array){if(array == null || array.length <= 1){return;}log.error("升序==数组大小为:{},预计排序次数为:{}",array.length,array.length-1);log.error("原始数组为:{}", Arrays.toString(array));//排序次数为N-1次for(int i =1;i//内部两两交互将最大的数据放在数组最后//由于最后的数据总是排好了的,我们只需要对未排序的进行排序 array.length-ifor(int j = 0;jint temp = array[j+1];//由于是升序排序只要前一个元素大于后一个元素则进行数据交换if(array[j] > temp){array[j+1] = array[j];array[j] = temp;}}log.error("第{}次排序,当前数组为:{}",i,Arrays.toString(array));}log.error("数据最终元素位置为:{}", Arrays.toString(array));}/*** 倒序* @param array* @author senfel* @date 2022/11/16 11:14* @return void*/public static void invertedSort(int[] array){if(array == null || array.length <= 1){return;}log.error("降序==数组大小为:{},预计排序次数为:{}",array.length,array.length-1);log.error("原始数组为:{}", Arrays.toString(array));//排序次数为N-1次for(int i =1;i//倒序排序也是两两比较交换位置//由于最大的元素都排在数组前面,则我们只需要对后面的元素与排好序的末尾元素比较即可//为保证第0号元素被比较 j>=ifor(int j = array.length-1;j>=i;j--){int temp =  array[j-1];if(temp < array[j]){array[j-1] = array[j];array[j] = temp;}}log.error("第{}次排序,当前数组为:{}",i,Arrays.toString(array));}log.error("数据最终元素位置为:{}", Arrays.toString(array));}
}

2、测试冒泡排序

public static void main(String[] args) {int[] array = {23,2,2,45,1,55,78,9,89};//升序sort(array);int[] array2 = {23,2,2,45,1,55,78,9,89};invertedSort(array2);
}

11:23:48.715 - 升序==数组大小为:9,预计排序次数为:8
11:23:48.718 - 原始数组为:[23, 2, 2, 45, 1, 55, 78, 9, 89]
11:23:48.718 - 第1次排序,当前数组为:[2, 2, 23, 1, 45, 55, 9, 78, 89]
11:23:48.718 - 第2次排序,当前数组为:[2, 2, 1, 23, 45, 9, 55, 78, 89]
11:23:48.718 - 第3次排序,当前数组为:[2, 1, 2, 23, 9, 45, 55, 78, 89]
11:23:48.718 - 第4次排序,当前数组为:[1, 2, 2, 9, 23, 45, 55, 78, 89]
11:23:48.719 - 第5次排序,当前数组为:[1, 2, 2, 9, 23, 45, 55, 78, 89]
11:23:48.719 - 第6次排序,当前数组为:[1, 2, 2, 9, 23, 45, 55, 78, 89]
11:23:48.719 - 第7次排序,当前数组为:[1, 2, 2, 9, 23, 45, 55, 78, 89]
11:23:48.719 - 第8次排序,当前数组为:[1, 2, 2, 9, 23, 45, 55, 78, 89]
11:23:48.719 - 数据最终元素位置为:[1, 2, 2, 9, 23, 45, 55, 78, 89]

11:23:48.719 - 降序==数组大小为:9,预计排序次数为:8
11:23:48.719 - 原始数组为:[23, 2, 2, 45, 1, 55, 78, 9, 89]
11:23:48.719 - 第1次排序,当前数组为:[89, 23, 2, 2, 45, 1, 55, 78, 9]
11:23:48.719 - 第2次排序,当前数组为:[89, 78, 23, 2, 2, 45, 1, 55, 9]
11:23:48.719 - 第3次排序,当前数组为:[89, 78, 55, 23, 2, 2, 45, 1, 9]
11:23:48.719 - 第4次排序,当前数组为:[89, 78, 55, 45, 23, 2, 2, 9, 1]
11:23:48.719 - 第5次排序,当前数组为:[89, 78, 55, 45, 23, 9, 2, 2, 1]
11:23:48.719 - 第6次排序,当前数组为:[89, 78, 55, 45, 23, 9, 2, 2, 1]
11:23:48.719 - 第7次排序,当前数组为:[89, 78, 55, 45, 23, 9, 2, 2, 1]
11:23:48.719 - 第8次排序,当前数组为:[89, 78, 55, 45, 23, 9, 2, 2, 1]
11:23:48.719 - 数据最终元素位置为:[89, 78, 55, 45, 23, 9, 2, 2, 1]

相关内容

热门资讯

股东读长文批比亚迪存在营销等短... 6月6日消息,6月6日上午,比亚迪2024年度股东大会上,一名股东在提问时读长文批比亚迪存在产品营销...
天问二号探测器在轨状态如何?圆... 6月6日消息,从国家航天局获悉,截至6月6日上午,天问二号探测器已在轨运行超8天,与地球距离超300...
回应特朗普取消合同威胁,马斯克... 6月6日消息,当地时间6月5日,美国太空探索技术公司(SpaceX)创始人马斯克表示,鉴于美国总统特...
宣布降息25个基点后,欧洲央行... 6月6日消息,欧洲央行行长拉加德当地时间6月5日在货币政策会议后表示,尽管欧洲央行当天决定将三大关键...
回应白宫签证限制令,哈佛大学决... 6月6日消息,当地时间6月5日,美国哈佛大学就特朗普政府禁止其国际学生入境美国的决定提起诉讼。哈佛大...
零跑冲向年销400万辆? 零跑... 出品丨虎嗅汽车组作者丨李赓头图丨零跑汽车“新势力要最终存活,年销100万辆或许不够,门槛至少要到40...
“国民果汁”北京汇源控诉大股东... 红星资本局9月14日消息,北京汇源食品饮料有限公司(以下简称“北京汇源”)与大股东的矛盾再度升级。近...
多家公司涉财务造假遭重罚 多家... 2025.09.14本文字数:1851,阅读时长大约3分钟作者 |第一财经 周斌证监会一日连开数张罚...
重大违法!证监会拉响高危警报,... 近日,证监会的一纸调查结果,让原本就身处退市风险警示状态的*ST东通(东方通)再度成为市场焦点。连续...
西贝创始人称罗永浩是网络黑社会 9月14日晚,西贝创始人贾国龙的表态截图流出。 贾国龙表示:“我应对方式有错,改。做饭的围着吃饭的转...