sublime编辑器写代码,命令行编译

减少对ide的依赖//可以提示缺少什么依赖import

所有示例代码动手敲一遍

Graham's Scan是经典的计算几何算法

shffule 与 map-reduce 有关—— 云计算

知道这些算法在身边切实的应用,对学习动力很有帮助

下一章开始,使用 git进行源代码管理!

先用来做自己的项目管理

Inspiration

计算机思维——不要重复造轮子

零件的通用性——拆分拆分再拆分,专业与分工细致

1.Callback = reference to executable code

核心思想是将函数作为实参传递给其他函数

Interface-Java 使我们能够以类型安全的方式使用为任何类型的数据开发的排序算法

Roadmap

对象需要实现Compareble Interface()

这些数据类型具有重新实现compareTo()方法的实例方法

排序实现里与数据类型无关

具体的比较由Comparable 接口处理

What I can use —— code

点击链接可看动画演示

1 Two useful sorting abstrations

Less


private static boolean less(Comparable v, Comparable w)
{ return v.compareTo(w)< 0 ;}

Exchange

//exchange a[i] & a[j]
private static void exch(Comparable[] a,int i ,int j)
{
Comparable swap = a[i];
a[i] = a[j];
a[j] = swap;
}

2.Selection Sort

select the min



1 rules of the game

  • Goal : Sort any type of data

sorting problem

real numbers

String

Callbacks

key point :passing function as arguments to other function

核心思想是将函数作为实参传递给其他函数

Interface-Java 使我们能够以类型安全的方式使用为任何类型的数据开发的排序算法

Roadmap | 技术路线图 - Callback

public inter face Comparable<Item>
{
public int compareTo(Item that); // generics method
}

对象需要实现Compareble Interface()

这些数据类型具有重新实现compareTo()方法的实例方法



排序实现里与数据类型无关

具体的比较由Comparable 接口处理

Two useful sorting abstrations

Less


private static boolean less(Comparable v, Comparable w)
{ return v.compareTo(w)< 0 ;}

Exchange

private static void exch(Comparable[] a,int i ,int j)
{
Comparable swap = a[i];
a[i] = a[j];
a[j] = swap;
}

2 Selection Sort | 选择排序

即使数据集已经部分有序,仍需重新遍历一遍

N^2

QuestionDemo-Selection Sort

Inner Loop - Selection sort

public class SelectionSort
{
public static void sort(Comparable[] a)
{
int N = a.length;
for (i = 0; i < N;i++)
{
int min = i;
for(int j = i+1; j < N;j++)
if(less(a[j], a[min]))
min = j;
exch(a, i, min);
}
} private static boolean less(Comparable v,Comparable w)
{
return v.compareTo(w) < 0;
} private static void exch (Comparable[] a, int i, int j)
{
Comparable swap = a[i];
a[i] = a[j];
a[j] = swap;
} }

3 Insertion Sort | 插入排序

Move one position at one time

如果左边(比自己)更大,则继续向左互换

QuestionDemo-Insertion Sort

Step1

Step2

Inner Loop - Insertion sort


import edu.princeton.cs.algs4.Insertion;
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom; public class InsertionSort
{
public static void sort(Comparable[] a)
{
int N = a.length; for (int i = 0; i < N; i++)
{
for(int j = i; j > 0; j--)
if(less(a[j],a[j-1]))
exch(a,j,j-1);
else break;
}
} private static boolean less(Comparable v,Comparable w)
{
return v.compareTo(w) < 0;
} private static void exch (Comparable[] a, int i, int j)
{
Comparable swap = a[i];
a[i] = a[j];
a[j] = swap;
} } public class SortDemo {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
Double[] a = new Double[N];
for (int i = 0; i < N; i++) {
a[i] = StdRandom.uniform();
}
Insertion.sort(a);
for (int i = 0; i < N; i++) {
StdOut.println(a[i]);
} }
}

4 ShellSort | 希尔排序

Shell - the name of the creator 1959

Move more than one position at one time // compare to the Insertion Sort

一次移动多个位置

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。

希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位

Photo:

7,3,1 Sort

  • Shellsort: which increment sequence to use?

package edu.princeton.cs.algs4;

public class ShellSort{

    public static void sort(Comparable[] a){
int n = a.length;
//// x = 3x+1 increment sequence: 1, 4, 13, 40, 121, 364, 1093, ...
int h = 1;
while (h < n/3) h = 3*h + 1; while (h >= 1) {
//h-sort the array
// Insertion sort
for (int i = h; i < n;i++){
for (j = i; j >= h && less(a[j],a[j-h]); j-= h){
exch(a, j, j-h);
}
}
assert isHsorted(a, h);
h /=3;//move to next increment,eg. 13,4,1
}
assert isHsorted(a, h);
} /***************************************************************************
* Helper sorting functions.
***************************************************************************/ // is v < w ?
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
} // exchange a[i] and a[j]
private static void exch(Object[] a, int i, int j) {
Object swap = a[i];
a[i] = a[j];
a[j] = swap;
} /***************************************************************************
* Check if array is sorted - useful for debugging.
***************************************************************************/
private static boolean isSorted(Comparable[] a) {
for (int i = 1; i < a.length; i++)
if (less(a[i], a[i-1])) return false;
return true;
} // is the array h-sorted?
private static boolean isHsorted(Comparable[] a, int h) {
for (int i = h; i < a.length; i++)
if (less(a[i], a[i-h])) return false;
return true;
} // print array to standard output
private static void show(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
StdOut.println(a[i]);
}
} /**
* Reads in a sequence of strings from standard input; Shellsorts them;
* and prints them to standard output in ascending order.
*
* @param args the command-line arguments
*/
public static void main(String[] args) {
String[] a = StdIn.readAllStrings();
ShellSort.sort(a);
show(a);
} }

5 Shuffle - StdRandom.java

Knuth Shuffle

a uniformly random permutation of the input array in linear time.

洗牌

Goal

from

to

Code


public class StdRandom
{
public static void shuffle(Object[] a)
{
int N = a.length;
for (int i = 0; i < N; i++);
{
int r = StdRandom.uniform(i+1); //StdRandom.uniform 均匀分布 [0,i+1)
//r = between 0 and i
exch(a,i,r);
}
} }

6 Convex Hull

Graham's Scan

凸包

The convex hull of a set of N points is the smallest perimeter fence enclosing the points

Goal

counterclockwise:逆时针

clockwise:顺时针

mechanical algorithm

Computer application

1.motion planning

2.farthest pair

Fact

P.S. Polar angle

Graham's Scan 葛立恒扫描

没错 ,就是提出葛立恒数的那位葛立恒

accroding the two facts

Demo

challenge

Implementing ccw(counterclockwise)

what is ccw

** math**

according to the Slope (斜率)

** implement**

612.1.004 ALGS4 | Elementary Sorts - 基础排序算法的更多相关文章

  1. 6种基础排序算法java源码+图文解析[面试宝典]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...

  2. 十大基础排序算法[java源码+动静双图解析+性能分析]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...

  3. Java面试宝典系列之基础排序算法

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  4. php四种基础排序算法的运行时间比较

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  5. Java基础系列--基础排序算法

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9082138.html 一.概述 基础排序算法包括:桶排序.冒泡排序.选择排序.插入排序等 ...

  6. php四种基础排序算法的运行时间比较!

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  7. 基础排序算法之快速排序(Quick Sort)

    快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...

  8. 基础排序算法之并归排序(Merge Sort)

    并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...

  9. ZH奶酪:【数据结构与算法】基础排序算法总结与Python实现

    1.冒泡排序(BubbleSort) 介绍:重复的遍历数列,一次比较两个元素,如果他们顺序错误就进行交换. 2016年1月22日总结: 冒泡排序就是比较相邻的两个元素,保证每次遍历最后的元素最大. 排 ...

随机推荐

  1. 剑指offer四十八之不用加减乘除做加法

    一.题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 二.思路 1. 采用位运算的方法,分三步: (1).两个数异或:相当于每一位相加,而不考虑进位 (2).两个数 ...

  2. 搭建互联网架构学习--004--centos安装Mysql

    Mysql安装 1. yum安装mysql yum -y install mysql-server 2. 启动mysql服务 启动mysql:service mysqld start 查看mysql的 ...

  3. 目录打散-hash算法

    前几篇说了文件上传,都是上传到了WebRoot下的up目录,这样是不行的,文件多了性能就不行了.文件一般都是分目录存放的,这里讲建目录的一种算法.先看结果,经过本算法建的目录,结构是这样的,还以up目 ...

  4. 解析ASP.NET WebForm和Mvc开发的区别 分类: ASP.NET 2013-12-29 01:59 11738人阅读 评论(5) 收藏

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  5. 【树】Kth Smallest Element in a BST(递归)

    题目: Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. ...

  6. 【树】Populating Next Right Pointers in Each Node

    题目: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode ...

  7. postman—数据同步和创建测试集

    postman使用之二:数据同步和创建测试集 一.数据同步 启动postman 后在右上角可以登录账号,登录后就可以同步自己的api测试脚本,连上网在办公区在家都可以同步. 二.创建测试集 1.点击c ...

  8. 全网最详细的跑python2.7时出现from mysql import connector ImportError: No module named mysql的问题解决办法(图文详解)

    不多说,直接上干货! C:\Users\lenovo>pip install mysql-connector-python-rf== Collecting mysql-connector-pyt ...

  9. git工具,conflict冲突解决方法

    这篇文章需要对git具有一定的了解,并且知道如何安装git工具(其实就是上git官网下载个文件,安装) git这种版本控制工具有什么好处 第一个,方便可以多人协同开发同一个项目或系统 第二个,当你系统 ...

  10. [Hive]HiveSQL解析原理

    Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析.Hive的稳定性和 ...