java 排序算法分析
一、冒泡排序(时间复杂度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 排序算法分析的更多相关文章
- Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)
一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- java排序集锦
java实现排序的一些方法,来自:http://www.javaeye.com/topic/548520 package sort; import java.util.Random; /** * 排序 ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
- (转)JAVA排序汇总
JAVA排序汇总 package com.softeem.jbs.lesson4; import java.util.Random; /** * 排序测试类 * * 排序算法的分类如下: * 1.插入 ...
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- java排序算法(十):桶式排序
java排序算法(十):桶式排序 桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征: 待排序列所有的值处于一个可枚举的范围之类: 待排序 ...
- java排序算法(九):归并排序
java排序算法(九):归并排序
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
随机推荐
- NET Core 3.1 PATCH HTTP 的使用注意事项
使用Postman请求示例: 一.在Headers要声明请求类型Content-Type 二.body提交要使用raw,且声明为json格式传输 三.如果有authorization验证还需要带上(如 ...
- appium获取toast和操作webview实例
从testerhome上看到很多测试同学分享了toast的获取方式,其中大部分是java版本的,但也有个python版本的:Appium1.7.2 android toast 消息测试 Appium获 ...
- MySQL基础篇(04):存储过程和视图,用法和特性详解
本文源码:GitHub·点这里 || GitEE·点这里 一.存储过程 1.概念简介 存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行.存储过程 ...
- Linux下Qt+CUDA调试并运行
Qt与CUDA相结合具体的操作主要修改qt项目中的配置文件pro.下面以测试的项目为例. 因为这是一个测试案例,代码很简单,下面将这几个文件的代码贴出来,方面后面对应pro文件和Makefile文件中 ...
- python利用scapy嗅探流量
能实时监测流量, 只显示有问题的流量, 可疑流量要显示出在那个数据包里 所有流量都保存到为pcap 每5000个包保存一个 第3个自动下载到本地 def sniff(count=0, st ...
- 11 个最佳的 Python 编译器和解释器
原作:Archie Mistry 翻译:豌豆花下猫@Python猫 原文:https://morioh.com/p/765b19f066a4 Python 是一门对初学者友好的编程语言,是一种多用途的 ...
- 关于Scrum+XP+DevOps的学习
最近听了ECUG大会上孙敬云老师的分享感觉受益匪浅,毕竟大学课本上只讲到瀑布模型就没有下文了,工作以后一直贯彻的都是Scrum路线,一直也没有时间好好的去学习整理这部分的知识,直到近几天听到了孙老师的 ...
- 前端页面表格排序 jQuery Table 基础
通常来说, 排序的方式有两种, 一种是我们在查询的时候就排好序,然后将数据渲染到前台页面上, 但是这样做有个弊端,就是在争对做好了缓存处理的系统, 在查询相同数据的时候进行排序,可能不能成功, 因为进 ...
- 《提升能力,涨薪可待》—Java并发之Synchronized
Synchronized简介 线程安全是并发编程中的至关重要的,造成线程安全问题的主要原因: 临界资源, 存在共享数据 多线程共同操作共享数据 而Java关键字synchronized,为多线程场景下 ...
- C++ 动态数组与链表
动态数组与链表 动态数组的大小不定,内存连续的,可以根据自己的需要,增加或删除元素.知道第一个元素的,那么就可以知道第二个元素,通过下标访问.如果中间插入一个元素,那么中间后面的元素的下标全部都要改变 ...