- 浏览: 69522 次
- 性别:
- 来自: 重庆
最新评论
-
javafound:
才看到 ,8错.
看我山寨版 hibernate 简单实现 一
文章列表
Thread.stop方法可能中断线程,但不安全,此方法都不会用上,快被淘汰了
对线程中的 join, wait, sleep的阻塞进行中断,使用Thread.interrupt()方法退出阻塞, 抛出InterruptedException异常
package com.longshine.nio.test;
//中断线程
public class ThreadTest {
static class TmpThread extends Thread{
boolean started = true;
public void run(){
whil ...
Java反射,改变final属性
- 博客分类:
- java类
问: 怎么改变final属性?
public class Test {
private A a = new A();
public void test() throws Exception{
Field field = a.getClass().getDeclaredField("finalStr");
field.setAccessible(true);
field.set(a, "bbb");
System.out.println(a.getString());
System.out.p ...
堆排序属于选择排序,它其实就是一个建立大顶堆的过程
大顶堆:
ki <= k2i+1 且 ki <= k2i+2; i>=0;ki>=0& ki<=n;
堆排序相较于直接选择排序的优势在于在建堆的过程中,剩余序列元素已经部分有序,剩余部分减少交换次数,节省时间, 本人觉得也有点像冒泡排序(每一次比较后将最大值放到后面).
它的时间复杂度为O(nlogn),空间复杂度为O(1). 不稳定
算法思路:
1.i 为最后结点(叶子结点) (i-1)/2或(i-2)/2为它的父结点p,其实是相等的
2.p值小于i值, 交换p 和i
3.p值与 ...
排序思路:
1.将数组分成两组A,B,建立临时数组 C,C长度=A + B
2. i,j分别属于A,B
3. 若A[i] > B[j] , 将B[j]放入C, j++; 否则 A[i]放入C, i++
4.循环3步骤,将A或B中剩余的元素放入C,再将C复制到数组中
5.递归3-4直到A,B序列的长度=1
#归并排序
class MergeSort:
def __init__(self, arrData):
self.arrData = arrData;
self.tmpData=[];
#建立临时数组 ...
Shell排序属于插入排序, 增量为1的Shell排序就是直接插入排序
设增量用h表示,Shell排序就是 将数组分为k = (len-1)/h组, 每组为i + n*h 序列 (n为整数 , n=[0,k-1],i=[0,k-1] )
即分成序列:
0,h,2*h......
1,1+h , 1+ 2*h.....
2, 2 +h, 2 + 2* h...
....
i , i + h, i +2*h....
分别为这些序列进行插入排序,再重新计算h值排序
增量公式有许多,这里使用 h = 3 * h +1
#Shell排序
class ShellSo ...
折半插入排序是插入排序的一种,这是直接插入排序的改进,当将要为i元素排序时,[0,i-1]位置的元素已有序,用折半查找法比顺序查找一般要快些.
实现思路:
i属于[1,n],
在[0,i-1]中取得中间位置k=(min+max)/2,这个区间已排好序,递归比较中间值, 直到 |min-max| <=1为止,将i元素插入到k附近.
#折半排序类
class HalfInsertSort:
#开始排序
#arrData:要排序的数组
def sort(self, arrData):
for i in range(1,len( ...
插入排序包括 直接插入排序, 折半插入排序, Shell排序
package com.longshine.arthmetic.sort;
import java.util.ArrayList;
import java.util.List;
import com.longshine.arthmetic.NumSortElement;
import com.longshine.arthmetic.SortElement;
//直接插入排序
/**
* 从第i项开始( 0<i<n)与第j项比较 0<=j<i;
* 若i项 < j ...
快速排序使用分治法策略来把一个串行分为两个子串行。
步骤为:
1. 从数列中挑出一个元素,称为“基准”(pivot),
2。重新排列数列,小的在基准前,大的在基准后,基准位于中间,称为分区(partition)操作
3。递归排列两个分区
最好的情况下,每次排列分区操作将数列分为等长的两个部分,这时调用次数为O(logn);
最坏的情况下,每次选中的基准为最小数或最大数,每次排列后的两部分的长度为N-i-1和1(i为次数),则调用次数为O(N)
因为每次调用都有n次比较,时间复杂度为O(n),所以时间复杂度为 O(nlogn) ~ O(n2).
在递归函数调用返回之 ...
一、引言
排序算法,是计算机编程中的一个常见问题。在日常的数据处理中,面对纷繁的数据,我们也许有成百上千种要求,因此只有当数据经过恰当的排序后,才能更符合用户的要求。因此,在过去的数十载里,程序员们为我们留下了几种经典的排序算法,他们都是智慧的结晶。本文将带领读者探索这些有趣的排序算法,其中包括介绍排序算法的某些基本概念以及几种常见算法,分析这些算法的时间复杂度,同时在最后将介绍我们独创的一种排序方法,以供读者参考评判。
二、几种常见算法的介绍及复杂度分析
1.基本概念
1.1稳定排序
相信有人会遇到这种情况,用vc做出来的程序附带了许多的dll,不想用打包安装的方式带着,因为大部分人还是喜欢绿色软件,不太喜欢需要安装的程序,但有那么多的dll在旁边真的太难看了,有没有办法将Dll与exe合并呢,当前是有的,且不需安装.
选择Exe文件和要合并的dll文件,再点击合并,将在exe文件的同级目录下生成 ***.New.exe文件,绿色简单,非常方便.
下载地址:
百度云: http://pan.baidu.com/s/1o6Doz6i
做MFC应用的时候,总觉得Virsual Studio做出来的皮肤太难看,ShinSharp这时候用上了,个人觉得是很不错的皮肤插件.适合做个人软件的朋友.
使用步骤:
1.Dialog中加入 #include "skinh.h"
2.导入 skinh.lib, 拷贝 skinh.lib和skinh.dll到工程目录
3.Dialog的OninitDialog中加入代码 SkinH_Attach();
4.模版皮肤是以.she结尾的文件,将模版文件重命名为 skinh.she,并拷贝到工程目录
效果图
本 ...
做个俄罗斯方块游戏
package com.longshine.game.tetris;
import java.awt.event.KeyListener;
/**
* 游戏驱动接口
* @author Administrator
*
*/
public interface GameListener extends KeyListener{
/**
* 时间更新
*
*/
public void tick();
/**
* 游戏开始
* @param scene
*/
public vo ...
svg桌面应用程序(二)svg与java交互
- 博客分类:
- svg
svg桌面应用程序需要界面与后台的交互,当点击界面中一按钮时,需要后台java中处理事务,然后传回到界面中显示。
1.svg中js代码中运行java代码:
参考http://xmlgraphics.apache.org/batik/using/scripting/ecmascript.html
<svg xmlns=" ...
svg桌面应用程序(一)
- 博客分类:
- java类
在java中显示svg图
下载bakit工程
http://xmlgraphics.apache.org/batik/download.cgi
介绍
http://xmlgraphics.apache.org/batik/index.html
创建svg文档对象
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
File file = new File( ...
java NIO通信demo
- 博客分类:
- java类
server端
public class NIOServer {
private Selector selector;
public static void main(String[] args){
NIOServer s = new NIOServer();
s.initSelector();
s.run();
}
public void run(){
while(true){
try{
selector.select();
Iterator it = selector.selectedKeys().it ...