JAVA面试中经常问到排序算法问题,本人结合网络上一些资源整理了编写一下常用的Demo,并附带运行结果,希望能帮助到大家。

/**
* @Title: 冒泡排序
* @Description: 将数组中相邻两位进行比较,较大(或较小)位置靠后
* @Description: 效率低,实现简单
* @Description: 最理想情况的时间复杂度为O(n)/最坏的时间复杂度为O(n^2)。
* @param [3, 8, 2, 5, 7] 输出结果 [2, 3, 5, 7, 8]
* @return void
*/
public static void main(String[] args) {
int[] array = new int[]{3,8,2,5,7};
System.out.println("初始数组:"+Arrays.toString(array));
for (int i = 0; i < array.length; i++) {//外层循环控制排序趟数
for (int j = 0; j < array.length -1 -i; j++) {//内层循环控制每一趟排序多少次
if(array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
System.out.println("第"+(i+1)+"趟,第"+(j+1)+"次结果:"+Arrays.toString(array));
}
}
System.out.println("冒泡排序结果:"+Arrays.toString(array));
}

/**
* @Title: 选择排序
* @Description: 每趟从待排序列表中选最小,放最前,重复操作后的到排序
* @Description: 特点:效率低,容易实现。
* @Description: 最理想情况的时间复杂度为O(n^2)/最坏的时间复杂度为O(n^2)。
* @param [10,3, 8, 2, 5, 7] 输出结果 [2, 3, 5, 7, 8,10]
* @return void
*/
public static void main(String[] args) {
int[] array = new int[]{10,3,8,2,5,7};
System.out.println("初始数组:"+Arrays.toString(array));
int index,temp;

for (int i = 0; i < array.length; i++) {// 外层循环控制排序趟数
index = i;// 用来记住数组元素的下标
for (int j = i + 1; j < array.length; j++) {
if(array[index] > array[j]) {
index = j;//只记录最小数值的位置
}
}
if(i != index) {
temp = array[i];//当前位置值
array[i] = array[index];//当前位置替换成最小值
array[index] = temp;//交换位置
}
System.out.println("第"+(i+1)+"趟结果:"+Arrays.toString(array));
}
System.out.println("选择排序结果:"+Arrays.toString(array));
}

/**
* @Title: 直接插入排序
* @Description: 将数组分为两部分,将后部分元素逐一插入前部分有序元素的适当位置
* @Description: 特点:效率低,容易实现。
* @Description: 最理想情况的时间复杂度为O(n)/最坏的时间复杂度为O(n^2)。
* @param [10,3, 8, 2, 5, 7] 输出结果 [2, 3, 5, 7, 8,10]
* @return void
*/
public static void main(String[] args) {
int[] array = new int[]{10,3,8,2,5,7};
System.out.println("初始数组:"+Arrays.toString(array));
int n = array.length;
int i,j,temp;
for (i = 1; i < n; i++) {
temp = array[i];
j = i;
while(j>=1 && array[j-1]>temp){
//为将要插入的新元素腾出空间。
array[j] = array[j-1];
j--;
}
//将新元素插入到已排序序列中。
array[j] = temp;
System.out.println("第"+(i)+"趟结果:"+Arrays.toString(array));
}
System.out.println("插入排序结果:"+Arrays.toString(array));
}

动图:

JAVA算法总结_时间复杂度_Demo的更多相关文章

  1. JAVA算法系列 冒泡排序

    java算法系列之排序 手写冒泡 冒泡算是最基础的一个排序算法,简单的可以理解为,每一趟都拿i与i+1进行比较,两个for循环,时间复杂度为 O(n^2),同时本例与选择排序进行了比较,选择排序又叫直 ...

  2. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

  3. Java基础回顾_第二部分_Java流程控制

    Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...

  4. java画图程序_图片用字母画出来_源码发布_版本二

    在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...

  5. java画图程序_图片用字母画出来_源码发布

    在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构 ...

  6. java画图程序_图片用字母画出来

    最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...

  7. JAVA算法系列 快速排序

    java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...

  8. java算法 蓝桥杯 乘法运算

    问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...

  9. java算法 蓝桥杯 扶老奶奶街

    一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...

随机推荐

  1. Python PycURL的安装使用

    PycURL中文简介:https://blog.csdn.net/qq_41185868/article/details/80487014 PycURL英文简介(如下):http://pycurl.i ...

  2. Selenium2启动浏览器且加载插件

    一.SELENIUM2启动浏览器 注意: SELENIUM2在启动浏览器时,都是启动一个干净的没有任务 插件及cookies信息的浏览器,即使是你之前的浏览器有设置过代理,到自动化启动时,也是没有代理 ...

  3. HDU 3435 KM A new Graph Game

    和HDU 3488一样的,只不过要判断一下是否有解. #include <iostream> #include <cstdio> #include <cstring> ...

  4. js基础之javascript的存在形式和js代码块在页面中的存放位置和 CSS 对比

    1.存在形式 文件 如: <script src='js/jc.js'></script> 前页面 <script type='text/javascript'>a ...

  5. luogu2114 [NOI2014]起床困难综合症

    大约是第一次做近几年NOI题(尽管是签到题)? 制作一个真值表,要是有哪一位原本是0但是能变成1那真是太好啦,要是有哪一位原来是1能变成1并且算上它不会超过m那也不错. #include <io ...

  6. jQuery效果show()方法

    $("button").click(function(){ $("p").show(); }); Syntax $(selector).show(speed,e ...

  7. session的工作原理、django的超时时间设置及session过期判断

    1.session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 session服务端中存在的数据为: session = { 随机字符串1:{ 用户1的相关信 ...

  8. Sogou日志分析(hive)

    1. 数据准备 1.1 数据预先放在mac本地桌面的“VB共享文件夹”中,从VisualBox虚拟机中/mnt/VBShare共享目录中转移到resources目标目录. [cloudera@quic ...

  9. hiho编程练习赛20

    模版题的世界 题目1 : 无根数变有根树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵包含 N 个节点的无根树,小Hi想知道如果指定其中某个节点 K 为根,那 ...

  10. [整理]菜鸟教程:docker使用笔记

    - docker # 查看 docker stats 指令的具体使用方法 - docker stats --help # 运行一个web应用 - docker pull training/webapp ...