一、冒泡排序(时间复杂度O(N^2))
public int[]  bubbling(int[] arr){
if(arr.length <= ) return arr;
for(int i = arr.length; i > ; i--){ 1
for(int j = ; j < i-; j ++){ 2
if(arr[j] > arr[j + ]){
int temp = arr[j];
arr[j] = arr[j + ];
arr[j + ] = temp;
}
}
}
return arr;
}

算法流程分析:

冒泡排序是先找到最大的数,放在第N 个位置, 然后再找到剩下的最大的数放在第 N-1 个位置, 重复一直找下去

上面的 “1” 是用来控制冒泡的终点的, “2” 是 用来执行冒泡动作的  ,相邻的两个元素之间进行比较,然后互换位置进行对调

算法复杂度分析:

   因为先冒泡: 0  - N-1 个,其次 0 - N-2 个 依次往下, 所以算法复杂度为O(N^2)

二、选择排序(时间复杂度O(N^2))
public void choose(int[] arr){
if(arr.length <= ) return arr;
for(int i = ; i < arr.length; i ++){
for(int j = i+ ; j < arr.length; j ++){
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}

算法流程分析:

选择排序是通过找出所有元素中最小的数, 放在 “0” 位置上, 然后找到剩下的数里面最小的数放在 “1” 位置上, 依次进行:

所以白话就是: 我先拿第一个数和其他书比较, 但是我要保证我手里面的数字是最小的(怎么保证就是不断比较), 然后把这个数字放在 “0” 位置上面

然后依次执行

算法复杂度分析:

   因为先拿一个数和其他数字进行比较:比较次数     N-1  次,其次  N-2 次 依次往下, 所以算法复杂度为O(N^2)

三、插入排序法(时间复杂度O(N^2))
public void insert(int[] arr){
if(arr.length <= ) return arr;
for(int i = ; i < arr.length; i ++){ 1
for(int j = ; j < i; j ++){ 2
if(arr[j] > arr[j + ]){
int temp = arr[j];
arr[j] = arr[j + ];
arr[j + ] = temp;
}
}
}
return (arr);
}

算法流程分析:

插入排序:就像你打扑克, 抓到一张牌,然后再抓一张牌,比较这两张牌,排序这两张牌, 然后再抓到第三张牌, 排序这三张牌,依次如下;

其中 "1" 就是用来控制比较前几张牌的, “” 是实现前比较前几张牌的大小的

算法复杂度分析:

   因为先比较: 2 个,其次 3个  依次往下, 所以算法复杂度为O(N^2)

问题: 你的程序是不是有问题, 在比较几个数字之间的大小的顺序是不是弄反了,违背了插入排序的思想,哈哈哈

四、总结

  三种基本的排序算法在时间复杂度上面基本差不多的,所以在排序的时候都可以使用

但是插入算法的时间复杂度并不稳定,最好的情况(1,2,3,4,5),不需要排序的这种,时间复杂度为 O(N),而

冒泡排序和选择排序的时间复杂度稳定为O(N^2)

 

java 排序算法分析的更多相关文章

  1. Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

    一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...

  2. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  3. java排序集锦

    java实现排序的一些方法,来自:http://www.javaeye.com/topic/548520 package sort; import java.util.Random; /** * 排序 ...

  4. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  5. (转)JAVA排序汇总

    JAVA排序汇总 package com.softeem.jbs.lesson4; import java.util.Random; /** * 排序测试类 * * 排序算法的分类如下: * 1.插入 ...

  6. java排序算法(一):概述

    java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...

  7. java排序算法(十):桶式排序

    java排序算法(十):桶式排序 桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征: 待排序列所有的值处于一个可枚举的范围之类: 待排序 ...

  8. java排序算法(九):归并排序

    java排序算法(九):归并排序

  9. java排序算法(八):希尔排序(shell排序)

    java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...

随机推荐

  1. Jquery为动态添加的元素添加事件

    $("tbody").on("click","button", function() { var text = $(this).parent ...

  2. 记录nfs的防火墙以及权限问题

    在前面的一篇文章(https://www.cnblogs.com/zyxnhr/p/10660431.html)中,已经介绍了nfs的安装挂载使用,但是存在两个问题 一. 防火墙 在nfs和nfs的守 ...

  3. form表单提交方式实现浏览器导出Excel

    刚开始使用ajax做Excel导出,发现ajax做不了浏览器导出只能下载到本地,于是用form提交可以提供浏览器下载Excel. 1>用ajax做本地下载: FileOutputStream f ...

  4. $NOIp$做题记录

    虽然去年做了挺多了也写了篇一句话题解了但一年过去也忘得差不多了$kk$ 所以重新来整理下$kk$ $2018(4/6$ [X]积木大赛 大概讲下$O(n)$的数学方法. 我是从分治类比来的$QwQ$. ...

  5. .Net Core Web Api实践之中间件的使用(一)

    前言:从2019年年中入坑.net core已半年有余,总体上来说虽然感觉坑多,但是用起来还是比较香的.本来我是不怎么喜欢写这类实践分享或填坑记录的博客的,因为初步实践坑多,文章肯定也会有各种错误,跟 ...

  6. HBase学习笔记(一)——基础入门

    1.what:什么是HBase HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储. HBase是一个高可靠 ...

  7. HDU3652 B-number 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题目大意: 求区间 \([1, n]\) 范围内包含连续的数位"13"并且能 ...

  8. git:rebase的原理

    git:rebase的原理 前提: 在最近的项目中,我碰到这样一个情况:第一版app上线之后,团队紧接着进行第二版本的开发,由于团队成员对git使用不熟悉,所以开发的每一次提交都是往远端master分 ...

  9. Nginx 核心配置详解

    目录 Nginx 核心配置详解 Nginx 四层访问控制: Nginx账户认证功能: 自定义错误页面: 自定义访问日志: 检测文件是否存在: 长连接配置: 作为下载服务器配置: 作为上传服务器: 其他 ...

  10. .sarut后缀病毒,勒索病毒

    前两天朋友的电脑中所有的文件后缀名都被改为.sarut 一看就是中了勒索病毒 每个文件夹下都有一个勒索信 查资料后发现这个病毒是STOP病毒的变种 可能是朋友使用windows激活工具了,然后这个病毒 ...