易截截图软件、单文件、免安装、纯绿色、仅160KB

快速排序的若干源码剖析(包括JAVA、Qt、算法导论)

 快排:快速排序,难度不是太大,但是是我经常把玩的小代码之一,引用快排代码创始人的一句话“要不是简练又明显没有错误,要不是复杂没有明显的错误”
起因:
主要是前一阵看刘汝佳的《算法艺术与信息学竞赛》P73页,碰巧我又亲手写了一遍那书上的测试了一下,发现竟然是错误的,然后我又测试了一下我以前写的快排的代码,发现也是错误的ORZ。然后我就翻了一下能找到的快排的源码。包括Qt、JAVA、算法导论,顺手用了一下系统的快排
简单说下
系统的快排 很快
Qt            绝对是另类的代码
JAVA        很符合一般人能想到的优化
算法导论   简练又明显没有错误
刘汝佳的《算法艺术与信息学竞赛》P73页
/*
*选自刘汝佳的《算法艺术与信息学竞赛》P73页,此为书上的算法,经测试是 错误的快排
*/
#include<stdio.h>
long a[5];
long p(long l,long r){//可以发现这里面有点错误
long x=a[l],i=l-1,j=r+1,t;
while(1){
do{//这种语句会出现很棘手的情况,使不该划分的被跳过去了
--j;
}
while(a[j]>x);
do{
++i;
}
while(a[i]>x);
if(i<j){
t=a[i];a[i]=a[j];a[j]=t;
}
else{
return j;
}
}
}
void q(long l,long r){
long n;
if(l<r){
n=p(l,r);
q(l,n);
q(n+1,r);
}
}
int main(){
a[0]=5 ;
a[1]=3 ;
a[2]=2 ;
a[3]=4 ;
a[4]=1 ;
q(0,4);
int i;
for(i=0;i<5;++i){
printf("%i ",a[i]);
}
return 0;
}

直接用系统快排的速度惊人,并且也是编程的好习惯
/*
*使用系统的快排,测试时会出现惊人的快
*/
#include<cstdio>
#include<cstdlib>
using namespace std;
int compare(const void*, const void*);
int main() {
int numsLength=5;
int *nums=new int[numsLength];
nums[0]=5;
nums[1]=7;
nums[2]=2;
nums[3]=4;
nums[4]=1;
for (int i=0;i<numsLength;++i) {
printf("%i ",nums[i]);
}
printf("\n")


相关文档:

java 串口通信 二

Java串口通讯
 
   
串行通讯协议有很多种,像RS232,RS485,RS422,甚至现今流行的USB等都是串行通讯协议。而串行通讯技术的应用无处不在。可能大家见的最多就是电脑的串口与Modem的通讯。记得在PC机刚开始在中国流行起来时(大约是在90年代前五年),那时甚至有人用一条串行线进行两台电脑之间的数 ......

java 和 C# 通用加密解密

java 代码
package util;
import java.io.UnsupportedEncodingException;
import dao.socket.OperType;
public class Encrpt {
 private String key;
 public Encrpt() {
  this("sitow");
 }
 public Encrpt(String key) {
  this.key = key;
 }
 private ......

java 工厂模式

一、引子
话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)看来这人比较爱国,没有日本车),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上Audi后他说"开奥迪车!"。你一定说:这人有病!直接说开车不就行了?! ......

Java递归


Java遍历文件夹的2种方法:
A.不使用递归:
import java.io.File;
import java.util.LinkedList;
public class FileSystem {
public static void main(String[] args) {
long a = System.currentTimeMillis();
LinkedList list = new LinkedList();
File dir = new File("c:\\java\\ ......

Java堆的管理 垃圾回收


作者:刘学超
作者简介
刘学超,华中师范大学计算机科学系网络与通讯研究所,你可以通过shuechao_lau@hotmail.com与他联系。
1  引言
Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multiane ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号