TntControls 被糟蹋了

原本打算介绍一下 Delphi 的一些优秀开源项目,其中就有我很喜欢的 TntControls。它为大部分 Delphi 原生控件提供了 Unicode 支持。很可惜,作者最近决定不打算继续维护了。为了让这套库可以继续活下去,在一片质疑和惋惜声中,它被转到了新东家 TMS Software 手下。TMS 是何许公司?应该算大的控件商了吧,相信很多 Delphi 粉丝都听说过,旗下控件超过应该有百个之多。(但是在下印象中,这个公司控件的产量普遍于其质量) 哎,当时我的心就一凉,心想为什么是 TMS 而不是 CodeGear 呢……。不过我还是好奇的询问了一下 TMS,究竟准备如何维护这套库?会不会和原作者一样,做成一个纯正的原生控件的 Unicode 补完项目。当时我得到的答案是 YES。可惜今天拿到新的代码 — 完全和他们当时说的,是两码事。他们那些烂控件也一并进入了新的 TMS Unicode Component Pack。估计原作者看到这个,也难免心酸。为一个优秀开源库的消失,不爽一记!

阅读更多

无聊至极(简称无极)中糟蹋电脑,三种排序算法测试中。。。

02-06

昨天无聊编了三个数据结构中讲到的排序算法,分别是冒泡排序BubbleSort,直接插入排序InsertSort,和快速排序QuickSort。书上说直接插入排序的时间复杂度为O(n^2),冒泡排序的时间复杂度也为O(n^2),快速排序的时间复杂度为O(logn)。rn我给一个int aa[10000]的数组赋了一万个数,然后分别看这些算法完成排序所需要的时间。rn对1000个数排序的时候,三个算法的耗时没有区别,均是“闪现”出结果;rn2000个数时,InsertSort和QuickSort是闪现,而BubbleSort出现了极短时间的停顿,但已经可以察觉出来;rn3000个数时,BubbleSort和其他两个的差距很大了,但QuickSort和InsertSort还是比较不出谁快谁慢;rn4000个数的时候,InsertSort和QuickSort稍微有了差别;rn5000个数的时候,靠!QuickSort崩了!其他两个正常!rn我想QuickSort崩的原因可能是系统堆栈益处,因为QuickSort用到了递归rn我给出我的代码,有兴趣的也可以糟蹋一下电脑。电脑硬件不同可能效果也不同rn#define MAXSIZE 100rn#define SUCCESS 1rn#define FAILUE 0rn#define LEN 5000rn/*==================================rn交换函数:交换两个地址中的值rn===================================*/rnvoid swap(int *p1,int *p2)rnrn int temp;rn temp = *p1;rn *p1 = *p2;rn *p2 = temp;rnrn/*===========交换函数===============*/rnrn/*==================================rn冒泡排序:rn首先将第一个记录的关键字和第二记录的关键字比较,rn若为逆序,则将两个记录交换,rn而后比较第二个记录和第三个记录的关键字,rn依次类推,直到n-1个记录和第n个记录的关键字进行过比较为止rn===================================*/rnint BubbleSort(int sqlist[],int listLength)rnrn int i,j;rn if(listLength <= 0)rn rn return FAILUE;rn rn if(listLength == 1)rn rn return SUCCESS;rn rn elsern rn for(i=listLength-1;i>0;i--)rn rn for(j=0;jsqlist[j+1])rn swap(sqlist+j,sqlist+j+1);rn rn rn return SUCCESS;rn rnrn/*==========冒泡排序===============*/rnrn/*==================================rn快速排序:rn通过一趟排序将待排记录分割成独立的两部分,rn其中一部分记录的关键字均比另一部分的小,rn则可分别对这两部分记录继续进行排序,直到整个序列有序rn===================================*/rnint QuickSort(int sqlist[],int listLength) /*快排主函数*/rnrn if(listLength <= 0)rn rn return FAILUE;rn rn if(listLength == 1)rn rn return SUCCESS;rn rn elsern rn QSort(sqlist,0,listLength-1);rn return SUCCESS;rn rnrnrnint QSort(int sqlist[],int low,int high) /*快排副函数*/rnrn int pivotolic;rn if(low < high)rn rn pivotolic = PartSort(sqlist,low,high);rn QSort(sqlist,low,pivotolic-1); /*对低端递归排序*/rn QSort(sqlist,pivotolic+1,high); /*对高端递归排序*/rn rnrnrnint PartSort(int sqlist[],int low,int high)rnrn int pivotolic,i;rn pivotolic = sqlist[low]; /*通常将第一个元素作为枢轴*/rn while(low= pivotolic))rn high--; /*high指针下移,*/rn swap(sqlist+low,sqlist+high); /*直到找到比枢轴小的元素和枢轴交换*/rnrn // printf("%-2d<-->%2d | low=%d,high=%d: ",sqlist[low],sqlist[high],low,high);rn // PrintArray(sqlist,LEN);rnrnrn while((low < high)&&(sqlist[low] <= pivotolic))rn low++ ; /*low指针上移,*/rn swap(sqlist+low,sqlist+high); /*直到找到比枢轴大的元素和枢轴交换*/rnrn // printf("%-2d<-->%2d | low=%d,high=%d: ",sqlist[low],sqlist[high],low,high);rn // PrintArray(sqlist,LEN);rn rnrn return low;rnrnrn/*============快速排序=============*/rnrn/*==================================rn直接插入排序:rn将一个记录插入到已经排好序的有序表中,rn得到一个新的记录数增1的有序表rn===================================*/rnvoid InsertSort(int sqlist[],int listLength)rnrn int i,j,k,temp;rn for(i=1;i=j;k--)rn rn sqlist[k+1] = sqlist[k];rn rn sqlist[j] = temp;rn rn rn rnrnrnrn

没有更多推荐了,返回首页