按照冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位 置;当一个元素小于或等于右侧相邻元素时,位置不变 。一、定义冒泡排序是最基础的排序算法 。
冒泡排序的英文是bubble sort,它是一种基础的交换排序 。
冒泡排序这种排序算法的每一个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组的一侧移动 。
二、思路按照冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位 置;当一个元素小于或等于右侧相邻元素时,位置不变 。
文章插图
经过第一轮后: 元素9作为数列中最大的元素,就像是汽水里的小气泡一样,“漂”到了最右侧 。
文章插图
每一轮结束都会有一个元素被移到最右侧 。
文章插图
三、实现1、冒泡算法
public static void main(String[] args) {int[] array = {1,6,2,5,3,0,3,5,4};array = bubbleSortBySortedExchanged(array);for(int i =0 ; i < array.length; i++){System.out.println(array[i]);}}public static int[] bubbleSort(int[] array){//有array.length-1个数字需要交换for(int i = 0; i < array.length - 1; i++){//每个数字比较的次数是array.length-1-ifor(int j = 0; j < array.length - 1 - i; j++){//如果当前值大于后一个值,则将更大的值移到后一位if(array[j] > array[j+1]){swap(array[j],array[j+1]);}}}return array;}//互相交换值public static void swap(int a,int b){int temp = a;a= b;b= temp;}
2、冒泡算法优化(1)外层优化
文章插图
【数据结构与算法:冒泡排序】第6轮已经可以结束了,也就是如果不需要交换了,则说明已经排好序了
思路:在外层循环处,设置标志isSort,默认为排好,如果不交换则跳出本次循环
(2)内部优化
已经被移到右侧的元素不用再参与比较了
思路:设置lastExchangeIndex标志单轮比较中最后一次比较的数值下标,下一轮比较就以lastExchangeIndex结束 。
private staticint[] bubbleSortBySortedExchanged(int[] array){if(array == null || array.length < 2){return array;}//单轮比较中最后一次交换的数值下标int lastExchangeIndex = 0;int sortBorder = array.length - 1;//不交换则表示已排好boolean isSorted = true;for(int i = 0 ;i < array.length - 1; i++){for(int j = 0; j < sortBorder ; j++){if(array[j] > array[j+1]){isSorted = false;int temp = array[j+1];array[j+1] = array[j];array[j] = temp;lastExchangeIndex = j;}}sortBorder = lastExchangeIndex;if(isSorted){break;}}return array;}
四、复杂度时间复杂度:O( n的2次方 )空间复杂度:O(1),也就是原地排序
稳定性:相等元素之间原有的先后顺序不变,也就是稳定排序
推荐阅读
- 小青桔茶的功效与作用~~懂视生活?
- 算算我的婚姻与命运 婚姻算卦网
- TVB|26岁男星疑公开与富婆恋情!曾被女方前任暴打,面部受伤缝10针
- 怒火12小时|陕西偶遇吴奇隆录节目,与蔡文静同框暴露身高,增高鞋太抢镜
- 张翰|张翰开2000万拉法聚会,颜值气质获赞回春,与女网红合影双手背后
- 喜羊羊与灰太狼兔子 兔年顶呱呱
- 翻转长边与翻转短边的双面打印有什么区别 横向打印长边翻转和短边翻转是什么意思
- 一本与二本的区别有哪些不同 一本与二本的区别
- 地下城与勇士|DNF:3月9日再送特别快递了!专属奶系职业使用,4大道具可以有
- 飞哥与小佛第二季第一季的歌 飞哥与小佛歌曲