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】算法读书杂记的更多相关文章

  1. 【Reading Note】Python读书杂记

    赋值 >>> list=[] >>> app=[list,list,list] >>> app [[], [], []] >>> ...

  2. javascript 数据结构和算法读书笔记 > 第五章 队列

    队列是一种列表,但是它只能够在队尾插入元素,在队首删除元素.队列用于存储按照顺序排列的数据,先进先出.而栈则是后入栈的元素反而被优先处理. 实际中一般被应用在进程池.排队操作上面. 1. 队列的操作 ...

  3. 【Deep Learning】Hinton. Reducing the Dimensionality of Data with Neural Networks Reading Note

    2006年,机器学习泰斗.多伦多大学计算机系教授Geoffery Hinton在Science发表文章,提出基于深度信念网络(Deep Belief Networks, DBN)可使用非监督的逐层贪心 ...

  4. <改变未来的九大算法>读书笔记二

    原理 数据库的一致性 1.事务和代办事项表把戏(预写日志记录) 1.代办事项表把戏:先把要执行的的操作写入硬件,即写日志.即使数据库操作错误,也可根据日志来纠正.对日志的操作具有等幂性,即日志中的每项 ...

  5. Python Geospatial Development reading note(1)

    chapter 1, Summary: In this chapter, we briefly introduced the Python programming language and the m ...

  6. javascript 数据结构和算法读书笔记 > 第四章 栈

    1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈p ...

  7. javascript 数据结构和算法读书笔记 > 第三章 列表

    1. 结构分析 列表首先要有以下几个属性: listSize 长度 pos 当前位置 dataStore 数据 我们要通过以下方法对上面三个属性进行操作: length() 获取长度 | getPos ...

  8. javascript 数据结构和算法读书笔记 > 第二章 数组

    这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: jav ...

  9. javascript 数据结构和算法读书笔记 > 第一章 javascript的编程环境和模型

    1.变量的声明和初始化 必须使用关键字 var,后跟变量名,后面还可以跟一个赋值表达式. var name; var age = 5; var str = 'hello'; var flg = fal ...

随机推荐

  1. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  2. [APUE]文件和目录(中)

    一.link.unlink.remove和rename 一个文件可以有多个目录项指向其i节点.使用link函数可以创建一个指向现存文件连接 #include <unistd.h> int ...

  3. 一起学微软Power BI系列-使用技巧(3)Power BI安卓手机版安装与体验

    Power BI有手机版,目前支持安卓,苹果和WP,不过没有WP手机,苹果在国内还不能用,要FQ和用就不测试了.安卓的我也也是费了九牛二虎之力才把app下载下来,把方法分享给大家. FQ太麻烦,所以建 ...

  4. Python应用03 使用PyQT制作视频播放器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 最近研究了Python的两个GUI包,Tkinter和PyQT.这两个GUI包的底层分别是Tcl/ ...

  5. 如何利用tcpdump对mysql进行抓包操作

    命令如下: tcpdump -s -l -w - dst -i eno16777736 |strings 其中-i指定监听的网络接口,在RHEL 7下,网络接口名不再是之前的eth0,而是 eno16 ...

  6. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  7. (资源整理)带你入门Spark

    一.Spark简介: 以下是百度百科对Spark的介绍: Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方 ...

  8. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  9. Linux字符设备驱动框架

    字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l ...

  10. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...