随笔-11  评论-1  文章-0  trackbacks-0
今天主要还是学习分治与递归,实现了归并排序和快速排序。
原来这两种排序方法还有可以改进的地方,比如归并排序中的merge函数,还有就是快速排序中出现有很多值相等的数组时的处理。
 1void merge(int *c ,int *d ,int left,int middle,int right)
 2{
 3    //合并c[left..middle],c[middle+1..right]到d[left..right]
 4    int i=left,j=right,k=left,t;
 5    for(t=left;t<=middle;t++)
 6    {
 7        d[t]=c[t];
 8
 9    }

10    for (t=middle+1;t<=right;t++)
11    {
12        d[right+middle+1-t]=c[t];//反向复制
13    }

14    while(k<=right)              //核心
15    {
16        if(d[i]<=d[j])
17            c[k++]=d[i++];
18        else c[k++]=d[j--];
19    }

20}

关于快速排序的优化,即三路快速排序,目前正在学习中。加油吧。
posted on 2010-07-18 16:24 douhui 阅读(228) 评论(0)  编辑 收藏 引用 所属分类: 算法初步

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理