博客
关于我
冒泡排序及其优化方案
阅读量:454 次
发布时间:2019-03-06

本文共 2499 字,大约阅读时间需要 8 分钟。

冒泡排序及其优化(以升序为例)

排序流程:

步骤1.从头开始比较相邻的两个元素,如果后面一个比前面一个小就交换位置,这样执行一轮最后的一个就是最大元素

步骤2.忽略之前找到的最大元素,重复执行步骤1,直到全部元素有序

图例

代码实现

package bubblesort;public class sort1 {    public static void main(String[] args) {        int[] arr={1,4,5,2,6,8,4,5};        int end=arr.length-1;        for (;0<=end;end--){            for (int start=0;start
arr[start+1]){ int temp=arr[start]; arr[start]=arr[start+1]; arr[start+1]=temp; } } } for (int i=0;i< arr.length;i++){ System.out.println(arr[i]); } }}

优化方案1:

如果我们排序到一半的时候这个数组就已经有序了,那么我们为什么还要继续排序呢,这不是浪费资源吗,所有我们通过一下的方案来解决,在每次进行排序的时候都判断一下该排序是不是已经有序了

实现方案

package bubblesort;public class sort1 {    public static void main(String[] args) {        int[] arr={1,4,5,2,6,8,4,5};        int end=arr.length-1;        for (;0<=end;end--){        //添加flag作为是不是已经有序的判断条件            boolean falg=true;            for (int start=0;start
arr[start+1]){ int temp=arr[start]; arr[start]=arr[start+1]; arr[start+1]=temp; falg=false; } } //如果flag等于true就说明数组已经有序了, // 在这一轮没有进入交换环节,所以退出循环 if (falg==true){ break; } } for (int i=0;i< arr.length;i++){ System.out.println(arr[i]); } }}

复杂度:

空间复杂度O(1)
时间复杂度:最好O(n)即一次循环后就退出
最差O(n^2) 即全部循环了才有序

优化方案二

在我们进行排序之前数组就已经局部有序了,那么我们就不用花多余的时间对末尾的数组数据进行排序了

如下图,数组的末尾已经局部有序了

实现方案

package bubblesort;public class sort3 {    public static void main(String[] args) {        int[] arr={1,4,5,2,6,8,4,5};        int end=arr.length-1;        for (;0<=end;end--){            //sortIndex的值可以取小于等于1的任何值            //以为如果原来就有序了,那么就需要另end在第一次循环后就小于0            //令其退出循环            int sortIndex=1;            for (int start=0;start
arr[start+1]){ int temp=arr[start]; arr[start]=arr[start+1]; arr[start+1]=temp; //记录最后一次交换数据的位置 sortIndex=start; } } //只要循环到已经有序的数组之前即可 end=sortIndex; } for (int i=0;i< arr.length;i++){ System.out.println(arr[i]); } }}

复杂度:

空间复杂度O(1)
时间复杂度:最好O(n)即一次循环后就退出
最差O(n^2) 即全部循环了才有序

算法的稳定性

排序算法是稳定的算法

以上就是冒泡排序算法及其优化方案,如有帮助还请点赞关注支持,如有疑问评论私信都可,看到后可帮助解答本博客主要侧重于数据结构于算法和java开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见

转载地址:http://nckfz.baihongyu.com/

你可能感兴趣的文章
Nacos如何实现Raft算法与Raft协议原理详解
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
Nacos服务注册与发现demo
查看>>
Nacos服务注册总流程(源码分析)
查看>>
nacos服务注册流程
查看>>
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>
Nacos注册中心有几种调用方式?
查看>>
nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
查看>>
nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
查看>>
Nacos简介、下载与配置持久化到Mysql
查看>>
Nacos简介和控制台服务安装
查看>>
Nacos管理界面详细介绍
查看>>
Nacos编译报错NacosException: endpoint is blank
查看>>
nacos自动刷新配置
查看>>
nacos运行报错问题之一
查看>>
Nacos部署中的一些常见问题汇总
查看>>
NACOS部署,微服务框架之NACOS-单机、集群方式部署
查看>>