JAVA算法总结_时间复杂度_Demo
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的更多相关文章
- JAVA算法系列 冒泡排序
java算法系列之排序 手写冒泡 冒泡算是最基础的一个排序算法,简单的可以理解为,每一趟都拿i与i+1进行比较,两个for循环,时间复杂度为 O(n^2),同时本例与选择排序进行了比较,选择排序又叫直 ...
- 算法基础_递归_求杨辉三角第m行第n个数字
问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...
- Java基础回顾_第二部分_Java流程控制
Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...
- java画图程序_图片用字母画出来_源码发布_版本二
在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...
- java画图程序_图片用字母画出来_源码发布
在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构 ...
- java画图程序_图片用字母画出来
最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...
- JAVA算法系列 快速排序
java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...
- java算法 蓝桥杯 乘法运算
问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...
- java算法 蓝桥杯 扶老奶奶街
一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...
随机推荐
- stm32独立看门狗实验
//ALIENTEK Mini STM32开发板V1.9范例代码5//独立看门狗实验//正点原子@ALIENTEK//技术论坛:www.openedv.com STM32F103RBT6属于中容量版本 ...
- 用Comparator排序和分组
Test实体 import java.util.Objects; /** * @author gallen * @description * @date 2018/11/16 * @time 18:5 ...
- npm 安装express npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE
npm安装总是报错 报错信息: 解决方案: 在命令行输入: npm config set strict-ssl false 设置之后即可安装软件:
- Linux学习-Boot Loader: Grub2
boot loader 的两个 stage 在 BIOS 读完信息后,接下来就是会到第一个开机装置 的 MBR 去读取 boot loader 了.这个 boot loader 可以具有选单功能.直接 ...
- BZOJ 3351: [ioi2009]Regions
对于一个询问(x,y)对y出现次数分类,若<=lim,在儿子处统计答案,若>lim则y的种类肯定<lim,在祖先处统计(仿佛要去重?但是没去重也过了,那个时限仿佛怎么做都能过) #i ...
- 光学字符识别OCR-4
经过第一部分,我们已经较好地提取了图像的文本特征,下面进行文字定位. 主要过程分两步: 1.邻近搜索,目的是圈出单行文字: 2.文本切割,目的是将单行文本切割为单字. ...
- STL学习笔记1--vector
C++STL(Standard Template Library)标准模板库是通用类模板和算法的集合.包含一些标准的数据结构的实现如queues(队列),lists(链表),stacks(栈)等.ST ...
- PHP协程是通过生成器实现的,这里测试了PHP生成器的一些特性
学习PHP的生成器,测试了一些特性.代码如下: function gen() { $name = (yield 'hello'); $nickname = (yield 'world'); yield ...
- 在Asp.net MVC中添加一个全局的异常处理的过滤器及Log4Net的使用
1:捕获异常新建一个异常处理的类MyExceptionAttribute捕获异常信息. //写到日志中.多个线程同时操作一个文件,造成文件的并发,这时用队列 public static Queue&l ...
- 九度oj 题目1079:手机键盘
题目描述: 按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次. 如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,k ...