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. python3 连接 mysql和mariadb的模块

    是pymysql python2中是MySQL-python sudo pip install pymysql 参考博客https://www.jb51.net/article/140387.htm

  2. linux系统装载ELF过程

    参考:程序员的自我修养 fork -->execve() //----kenerl space--------------- sys_execve() /*arch\i386\kernel\pr ...

  3. C语言结构体初始化的四种方法(转载)

    原文:https://blog.csdn.net/ericbar/article/details/79567108 定义 struct InitMember { int first: double s ...

  4. NTC温度采集之数据拟合——freemat软件实现

    在stm32温度采样的过程中,使用到了NTC传感器,上拉接6.2K的电阻,信号给AD采样端口,通过NTC的电阻阻值表中,计算得到下面两端数据,在freemat中实现数据拟合,用于程序中温度和电压信号的 ...

  5. #1 add life to static pages && connect to MySQL

    由于实验室 Project 中需要用到PHP, 之前也没接触过 PHP, 因此把 编程入门 <Head Fist PHP & MySQL >找来花了四五天快速过了一遍. 现在想把书 ...

  6. WPF触控程序开发(二)——整理的一些问题

    上一篇(WPF触控程序开发)介绍了几个比较不错的资源,比较基础.等到自己真正使用它们时,问题就来了,现把我遇到的几个问题罗列下,大家如有遇到其他问题或者有什么好的方法还望赐教. 问题1.如何获取触控点 ...

  7. winServer08上安装SQL时提示“必须使用管理角色安装”或配置microsoft.net framework 3.5

    server 2008安装vs2008后报错,如图: 解决方法: 控制面板—>程序—>打开或关闭Windows功能—>进入服务器管理器选择功能—>添加功能 然后勾选.NET F ...

  8. 忘记MySQL的root密码的解决方法

    经常会有朋友或者同事问起,MySQL 的 root 密码忘了,不知道改怎么办. 其实解决方法很简单,下面是详细的操作步骤. (1)修改配置文件my.cnf,在配置文件[mysqld]下添加skip-g ...

  9. web结对项目

    一.Coding.Net项目地址:        https://git.coding.net/verde/Pair_Work.git 二.对接口进行的设计 看教科书和其它资料中关于Informati ...

  10. Python Excel导入数据库

    import xlrd import MySQLdb def inMySQL(file_name): wb = xlrd.open_workbook(file_name) sh = wb.sheet_ ...