`
文章列表
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 ...
问: 怎么改变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桌面应用程序需要界面与后台的交互,当点击界面中一按钮时,需要后台java中处理事务,然后传回到界面中显示。   1.svg中js代码中运行java代码:   参考http://xmlgraphics.apache.org/batik/using/scripting/ecmascript.html   <svg xmlns=" ...
在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

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 ...
Global site tag (gtag.js) - Google Analytics