快速排序的若干源码剖析(包括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")
相关文档:
<!--
/* 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:"\@宋体" ......
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.font.TextAttribute;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.text.AttributedCharacterIterator;
import java.text. ......
package fileTest;
import java.io.*;
public class FileOperate {
public FileOperate() {
}
public static void main(String args[]){
// newFolder("D:/100");
moveFile("e:/978 ......
学习Java必看 - JAVA代码编写的30条建议
(1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定义中出现了常数初始化 ......
作者:刘学超
作者简介
刘学超,华中师范大学计算机科学系网络与通讯研究所,你可以通过shuechao_lau@hotmail.com与他联系。
1 引言
Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multiane ......