易截截图软件、单文件、免安装、纯绿色、仅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常用数学类方法


<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体" ......

Java语言如何访问不同字符集的Oracle数据

一、java访问中文Oracle数据库上连接的US7ASCII数据库
1、读方法
public String convertLink_DB(String s) {
  if(s != null){
   try{
    byte[] b = s.getBytes();
    for(int i=0; i<b.length; i++){
     b[i] ......

java 工厂模式

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

Java中无法捕获C程序printf输出的问题

在测试
ConsoleRunner
的过程中发现一个有意思的现象,一段很简单的
C
程序:
 
#include <stdio.h>
#include <windows.h>
 
int main() {
   
int i = 0;
   
for (;;) {
       
printf("%d\n", i++); ......

Java堆的管理 垃圾回收


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