【Reading Note】算法读书杂记
1 排序
排序基本信息
稳定性:排序前大的数在排序后,大的数依然保持不变就是稳定排序,反之不稳定
内外排序:根据待排序的记录是否放在内存里面区分的。诸如:插入排序(直接插入&希尔)、交换排序(冒泡&快排)、选择排序(简单选择&堆排)、归并排序(归并)。
算法性能影响:时间性能、辅助空间、算法复杂性(算法本身的复杂度跟时间复杂度区分开)。
简单算法:冒泡排序、简单选择排序、直接插入排序
改进算法:希尔排序(不稳定)、堆排序(不稳定)、归并排序、快排(不稳定)
总之:排序四大类,简单有三种,改进为四种。不稳多改进算法
排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性
冒泡排序 O(N^2) O(N) O(N^2) O(1) 稳定
简单选择 O(N^2) O(N^2) O(N^2) O(1) 稳定
直接插入 O(N^2) O(N) O(N^2) O(1) 稳定
希尔排序 O(NlogN~N^2)O(N^1.3) O(N^2) O(1) 不稳定
堆排序 O(NlogN) O(NlogN) O(NlogN) O(1) 不稳定
归并排序 O(NlogN) O(NlogN) O(NlogN) O(N) 稳定
快速排序 O(NlogN) O(NlogN) O(N^2) O(logN~N) 不稳定
简单算法:冒泡排序
个人名片:我是冒泡排序,稳定性较好,是内排序中的交换排序,也是简单排序会员。基本思想,哦也可以说个人介绍:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
Java实现:
import java.util.Queue;
import java.util.Stack; public class BagDome { /*交换数据函数*/
public static void swap(int[] arr,int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void swap1(int[] arr,int i,int j){
arr[i]=arr[i]^arr[j];
arr[j]=arr[i]^arr[j];
arr[i]=arr[i]^arr[j];
}
/*遍历读取数组*/
public static void printarr(int[] arr){
for(int i:arr){
System.out.print(" "+i);
}
}
//1 对记录作交换排序(冒泡排序的初级版),例如int[] a={9,1,5,8,3,7,4,6,2};
public static void BubbleSort1(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
swap(arr,i,j);
}
}
}
}
//2 对记录进行冒泡排序(改进版),例如int[] a={9,1,5,8,3,7,4,6,2};
public static void BubbleSort2(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=arr.length-2;j>=i;j--){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
//3 基本有序的冒泡优化算法,例如int[] a={2,1,3,4,5,6,7,8,9};
public static void BubbleSort3(int[] arr){
boolean flag=true;
for(int i=0;i<arr.length && flag;i++){
for(int j=arr.length-2;j>=i;j--){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
flag=false;
}
}
}
}
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
//int[] arr={9,1,5,8,3,7,4,6,2};
int[] arr={2,1,3,4,5,6,7,8,9};
System.out.print("冒泡排序前:\t");
printarr(arr);
//BubbleSort1(arr);
//BubbleSort2(arr);
BubbleSort3(arr);
System.out.print("\n冒泡排序后:\t");
printarr(arr);
}
}
简单排序:简单选择排序
个人名片:我是简单选择排序,稳定性较好,是内排序中的选择排序,也是简单排序会员。基本思想:。
【Reading Note】算法读书杂记的更多相关文章
- 【Reading Note】Python读书杂记
赋值 >>> list=[] >>> app=[list,list,list] >>> app [[], [], []] >>> ...
- javascript 数据结构和算法读书笔记 > 第五章 队列
队列是一种列表,但是它只能够在队尾插入元素,在队首删除元素.队列用于存储按照顺序排列的数据,先进先出.而栈则是后入栈的元素反而被优先处理. 实际中一般被应用在进程池.排队操作上面. 1. 队列的操作 ...
- 【Deep Learning】Hinton. Reducing the Dimensionality of Data with Neural Networks Reading Note
2006年,机器学习泰斗.多伦多大学计算机系教授Geoffery Hinton在Science发表文章,提出基于深度信念网络(Deep Belief Networks, DBN)可使用非监督的逐层贪心 ...
- <改变未来的九大算法>读书笔记二
原理 数据库的一致性 1.事务和代办事项表把戏(预写日志记录) 1.代办事项表把戏:先把要执行的的操作写入硬件,即写日志.即使数据库操作错误,也可根据日志来纠正.对日志的操作具有等幂性,即日志中的每项 ...
- Python Geospatial Development reading note(1)
chapter 1, Summary: In this chapter, we briefly introduced the Python programming language and the m ...
- javascript 数据结构和算法读书笔记 > 第四章 栈
1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈p ...
- javascript 数据结构和算法读书笔记 > 第三章 列表
1. 结构分析 列表首先要有以下几个属性: listSize 长度 pos 当前位置 dataStore 数据 我们要通过以下方法对上面三个属性进行操作: length() 获取长度 | getPos ...
- javascript 数据结构和算法读书笔记 > 第二章 数组
这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: jav ...
- javascript 数据结构和算法读书笔记 > 第一章 javascript的编程环境和模型
1.变量的声明和初始化 必须使用关键字 var,后跟变量名,后面还可以跟一个赋值表达式. var name; var age = 5; var str = 'hello'; var flg = fal ...
随机推荐
- 干货来袭-整套完整安全的API接口解决方案
在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- JavaScript String对象
本编主要介绍String 字符串对象. 目录 1. 介绍:阐述 String 对象的说明以及定义方式. 2. 实例属性:介绍 String 对象的实例属性: length. 3. 实例方法:介绍 St ...
- [转载]强制不使用“兼容性视图”的HTML代码
在IE8浏览器以后版本,都有一个"兼容性视图",让不少新技术无法使用.那么如何禁止浏览器自动选择"兼容性视图",强制IE以最高级别的可用模式显示内容呢?下面就介 ...
- js数组去重几种思路
在一些后台语言中都内置了一些方法来处理数组或集合中重复的数据.但是js中并没有类似的方法,网上已经有一些方法,但是不够详细.部分代码来源于网络.个人总计如下:大致有4种思路 1)使用两次循环比较原始的 ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- 1199 Problem B: 大小关系
求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...
- SpringMvc中的数据校验
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
- Linux系统中用DNW向ARM开发板下载程序
在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...
- 【repost】JS中的异常处理方法分享
我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...