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制作你心目中的完美女神脸!

    简介 写这个项目的本来目的是通过构建一个神经网络来训练人脸图片,最后达到能根据图片自动判断美丑的效果.可能是因为数据集过小,或者自己参数一直没有调正确,无论我用人脸关键点训练还是卷积神经网络训练,最后 ...

  2. Linux学习-Linux 的开机流程分析

    开机流程一览 系统开机的经过可以汇整成底下的流程的: 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置; 读取并执行第一个开机装置内 MBR 的 boot Loader (亦 ...

  3. 安装go 1.5 & 部署

    https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz tar -C /usr/local -xzf go1.5.linux-am ...

  4. ora flashback详解

    使用oracle数据库时,难免会碰到一些问题. 例:1.如何回滚已经commit了的数据 2.如何查询已经被覆盖掉的数据[update],或者被delete了的数据 3.如何将数据恢复到某个时间点 我 ...

  5. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  6. 博客笔记(blog notebook)

    1. 机器学习 2. NLP 3. code 实际好人 实际坏人 预测百分比 预测好人 \(p_GF^c(s_c\|G)\) \(p_BF^c(s_c\|B)\) \(F^c(s_c)\) 预测坏人 ...

  7. Educational Codeforces Round 34 (Rated for Div. 2)

    A. Hungry Student Problem time limit per test 1 second memory limit per test 256 megabytes input sta ...

  8. Struts2理解——转发和重定向

        转发和重定向设置:         <action name="deptAction" class="com.syaccp.erp.action.DeptA ...

  9. HDU1877 又一版 A+B

    Problem Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数.   Input 输入格式:测 ...

  10. 【Luogu】P3232游走(高斯消元解概率)

    题目链接 参见远航之曲dalao的题解,我再写一遍的话就没啥意思了. #include<cstdio> #include<cstring> #include<algori ...