二叉索引树java代码 二叉搜索树代码( 五 )


主键是确定数据库中的表的记录的唯一标识字段,可以是表中的一个字段 , 也可以是表中的多个字段组成的 。一旦确定为主键,则该字段不可为空也不可以重复 。比如学生表中的学号就可以定义成该表的字段
外键的定义是相对于主键而言的,比如另有一张成绩表,表中也出现了学生表中的对应学号字段,则相对于学生表,学号就是成绩表的外键
String和StringBuffer的区别
STRING的长度是不可变的,STRINGBUFFER的长度是可变的 。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String , 那么使用StringBuffer的toString()方法
try{}catch(){}finally{}结构,try{}内出现异常,try{}内剩下尚未执行的代码还执行吗,finally{}内的代码呢?finally{}后面的代码呢
执行 finally{}内的代码最后执行
排序算法
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大?。?递增或递减的排列起来的操作 。
分类
在计算机科学所使用的排序算法通常被分类为:
计算的复杂度(最差、平均、和最好表现),依据串列(list)的大?。╪) 。一般而言,好的表现是O 。(n log n) , 且坏的行为是Ω(n2) 。对於一个排序理想的表现是O(n) 。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要Ω(n log n) 。
记忆体使用量(以及其他电脑资源的使用)
稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序 。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串列中R出现在S之前 , 在排序过的串列中R也将会是在S之前 。
一般的方法:插入、交换、选择、合并等等 。交换排序包含冒泡排序(bubble sort)和快速排序(quicksort) 。选择排序包含shaker排序和堆排序(heapsort) 。
当相等的元素是无法分辨的,比如像是整数,稳定度并不是一个问题 。然而,假设以下的数对将要以他们的第一个数字来排序 。
(4, 1) (3, 1) (3, 7) (5, 6)
在这个状况下,有可能产生两种不同的结果,一个是依照相等的键值维持相对的次序 , 而另外一个则没有:
(3, 1) (3, 7) (4, 1) (5, 6) (维持次序)
(3, 7) (3, 1) (4, 1) (5, 6) (次序被改变)
不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此 。不稳定排序算法可以被特别地时作为稳定 。作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个物件间之比较,就会被决定使用在原先资料次序中的条目,当作一个同分决赛 。然而,要记住这种次序通常牵涉到额外的空间负担 。
排列算法列表
在这个表格中,n是要被排序的纪录数量以及k是不同键值的数量 。
稳定的
冒泡排序(bubble sort) — O(n2)
鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2)
插入排序 (insertion sort)— O(n2)
桶排序 (bucket sort)— O(n); 需要 O(k) 额外 记忆体
计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外 记忆体
归并排序 (merge sort)— O(n log n); 需要 O(n) 额外记忆体
原地归并排序 — O(n2)
二叉树排序 (Binary tree sort) — O(n log n); 需要 O(n) 额外记忆体
鸽巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 额外记忆体
基数排序 (radix sort)— O(n·k); 需要 O(n) 额外记忆体
Gnome sort — O(n2)
Library sort — O(n log n) with high probability, 需要 (1+ε)n 额外记忆体
不稳定
选择排序 (selection sort)— O(n2)

推荐阅读