??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.util.Arrays;
import java.util.Stack;
public class QSort {
/**
* @author WangYu 2008-05-29 初始
* @param pData
* 需要排序的数组
* @param left
* 左边的位|?初始gؓ0
* @param length
* 双的位|?初始gؓ数组长度
*/
public static void quickSort(int[] pData, int left, int right) {
int i, j;
int middle, temp;
i = left;
j = right;
middle = pData[left];
while (true) {
while ((++i) < right - 1 && pData[i] < middle)
;
while ((--j) > left && pData[j] > middle)
;
if (i >= j)
break;
temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
pData[left] = pData[j];
pData[j] = middle;
System.out.print("分界?" + middle + " 下标" + j + ": ");
for (int k = 0; k < pData.length; k++) {
System.out.print(pData[k] + " ");
}
System.out.println();
if (left < j)
quickSort(pData, left, j);
if (right > i)
quickSort(pData, i, right);
}
/**
* @author ardorleo 2010-11-21 快速排序优化后的递归实现
* @param pData
* 需要排序的数组
* @param left
* 左边的位|?初始gؓ0
* @param length
* 双的位|?初始gؓ数组长度
*/
public static void qSort1(int[] pData, int left, int length) {
int i, j;
int middle, temp;
i = left;
j = length;
middle = pData[left];
while (true) {// 在@环体中,middle只用做比较,但g持不?/span>
while ((++i) < length - 1 && pData[i] < middle)
;
while ((--j) > left && pData[j] > middle)
;
if (i >= j)
break;
temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
// 较小的值在左,较大的值右
pData[left] = pData[j];
pData[j] = middle;
System.out.print("分界?" + middle + " 下标" + j + ": ");
for (int k = 0; k < pData.length; k++) {
System.out.print(pData[k] + " ");
}
System.out.println();
// 此种条g可以避免多余排序Q每一最后两个相d比较后,׃用再递归了)
if (j - left > 1)
qSort1(pData, left, j);
if (length - i > 1)
qSort1(pData, i, length);
}
/**
* @author ardorleo 2010-11-21 快速排序的非递归实现
* @param pData
* 需要排序的数组
* @param left
* 左边的位|?初始gؓ0
* @param length
* 双的位|?初始gؓ数组长度
*/
public static void qsort2(int[] pData, int orignal_start, int orignal_length) {
int temp;
int start = orignal_start;
int length = orignal_length;
int left = orignal_start;
int right = orignal_length;
int reference = pData[left];
Stack<Integer> intStack = new Stack<Integer>();
while (true) {
while (true) {
while ((++left) < length - 1 && pData[left] < reference)
;
while ((--right) > start && pData[right] > reference)
;
if (left >= right)
break;
temp = pData[left];
pData[left] = pData[right];
pData[right] = temp;
}
pData[start] = pData[right];
pData[right] = reference;
System.out.print("分界?" + reference + " 下标:" + right+ " 当前序: ");
for (int k = 0; k < pData.length; k++) {
System.out.print(pData[k] + " ");
}
System.out.println();
//分值左Ҏ?/span>
if (right > start + 1) {
intStack.push(length);
length = right;
left = start;
}
//分值右Ҏ?/span>
while (length <= left + 1 && !intStack.empty()) {
int tempLength = intStack.pop();
left = length + 1;
length = tempLength;
}
if (length > left + 1) {
start = left;
right = length;
}
//l束条g
if (intStack.empty() && length <= left + 1)
break;
//left值有可能大于下标最大?/span>
reference = pData[left];
}
}
public static void main(String[] args) {
int[] pData = new int[10];
for (int i = 0; i < 10; i++) {
pData[i] = (int) (Math.random() * 100);
}
System.out.print("数组原始序列:");
for (int i = 0; i < pData.length; i++)
System.out.print(pData[i] + " ");
System.out.println("\n***********************");
QSort.qsort2(Arrays.copyOf(pData, pData.length), 0, pData.length);
System.out.println("***********************");
QSort.qSort1(Arrays.copyOf(pData, pData.length), 0, pData.length);
System.out.println("***********************");
QSort.quickSort(Arrays.copyOf(pData, pData.length), 0, pData.length);
}
}
]]>
]]>
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
Ardor Leo【对AJAX的编码问题初战告P二战失利?hellip;??
Evan ?
|
也谈Eclipse中的q程调试
问题的由来:qx的开发,我们基本都是?/span>
模式下做的,q样便于发现问题l于修正。一旦项目到了实施测阶段Q程序被部v到服务器上,现场调试׃成ؓ一个问题。因部v的服务器上的日志往往不能提供_的信息;或是有了_的信息,可即时想得到一个状态点的信息又不是太容易(比如说几个关键变量的x|。于是想刎ͼ如果可以象本试程序一样就好了?span lang="EN-US">
于是Q呵呵,又是于是Q,
了一下,真得q是扑ֈ了一文章(先谢谢了Q,做法?span lang="EN-US">
只要?/span>
的启动文件中加入一些参数就可以?/span>
中启?/span>
了,具体Ҏ如下Q?/span>
?/span>
catalina.bat
文g中加?/span>
Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9046
?/span>
打开
Q在
?/span>
菜单中选择
,然后在左边的树Ş菜单中新增一?/span>
q程调试
Q填
写最基本的几信息就行了Q这几项信息是:调试名称Q工E名Uͼ调试L?/span>
以及
Q在
前打上勾
最主要的就是端口信息,q个端口信息来自于上面那一串参C?/span>
,可以?/span>
讄ZQ何未被占用的端口?/span>
以控制台方式启动
Q可以在控制台看?/span>
dt_socket at address: 5888"
q样的信息,说明调试端口已经被监听。然后打开之前讄的调试ƈ?/span>
或?/span>
内置的浏览器中输?/span>
q行
E序Q记得在q行
E序之前要设|断炏V?/span>
现在可以在
中进?/span>
调试?/span>
要说明的是:
我ƈ没按上文那样讄变量。我看了
q个批处理文Ӟ写的很严谨,环境变量讄有它自己的规范,我不x攏V在q个文g我看Cq么一个名?/span>
。对了,看到它你q道,你可以徏立这么一个文件把
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9046
放进去,OK啦。但q是只是
中的作法?span lang="EN-US">
岔开说一句话。其实,上面的参数设|ƈ不是都需要的Q主要的׃:
?/span>
Q对应于
文g?/span>
?/span>
C个变量,你可以直接查询ƈ修改q两个参数的|注意
的g定是
才行。不q启动方式有些变化,命o行需要这P
jpda start
?/span>
中,可以直接
jpda start
命o直接启动调试模式Q不q默认的端口?/span>
,
你也可以?/span>
查找
把端口修Ҏ要的倹{至于写配置文g
直接?/span>
starup.sh
启动的Ş式,我没成功Q呵?span lang="EN-US">
下面q个是
中的
讄H口了,别告诉我你不会调出来Q呵?span lang="EN-US">
q里Q我在本Z?/span>
调试E序。当Ӟ自然是有好处的了?/span>
中调E序的都知道Q在
中再启动其他服务Q不一定是
啦)Q会?span lang="EN-US">eclipse~辑的响应速度急剧下降Q甚臛_死,很是不爽Q现在好了,q么一设,既有了速度Q又可以设调试断点,哈哈Q舒服啊?/span>
]]>