MemoryGarden's Blog

努力 -----------大能猫

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 11 Stories :: 20 Comments :: 0 Trackbacks
from -> introdution to algorithms


分治的思想。 贴个代码

#include <stdio.h>
#include 
<string.h>
int a[100], n;
int partition(int l, int r){
    
int x = a[r], i = l - 1, j, t;
    
//x为哨兵
    
//i 为两个集合(小于等于哨兵[在左边], 大于等于哨兵[在右边])的分界线
    for(j = l; j < r; j++){
        
if(a[j] <= x){//若发现 小于哨兵的元素 则左边的集合长度扩展,交换。
            i++;
            t 
= a[i];a[i] = a[j];a[j] = t;
        }
    }i
++;//转移到右边几何第一个并交换
    t = a[i];a[i] = a[r];a[r] = t;
    
return i;//为哨兵所在位置。 保证左边和右边集合的正确划分。
}

void qsort(int l, int r){
    
int q;
    
if(l < r){
        q 
= partition(l, r);//partition//对于搜索树来说,类似是先序遍历的。
        qsort(l, q - 1);//左半部分
        qsort(q + 1, r);//右半部分
        
//这里没有合并操作,a[l, r]已经是有序的了。
    }
}

int main(){
    freopen(
"qsort.in""r", stdin);
    freopen(
"qsort.out""w", stdout);
    
int i, j;
    
while(scanf("%d"&n) != -1){
        
for(i = 1; i <= n; i++)
            scanf(
"%d"&a[i]);
        qsort(
1, n);
        
for(i = 1; i <= n; i++)
            printf(
"%d ", a[i]);
        puts(
"");
    }
    
return 0;
}


posted on 2009-09-28 14:46 memorygarden 阅读(905) 评论(0)  编辑 收藏 引用 所属分类: 报告

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