| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 269 人关注过本帖
标题:排序问题
只看楼主 加入收藏
何人我
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-9-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
排序问题
FUN的功能:把形参a所指数中的最大值放在a[0]中,接着求出a所指数中的最小值放在a[1]中,再把a所指数元素中的次大值放在 a[2]中,把a数组元素中的次小值放在a[3]中,其余以此类推
若a 所指数的数据最初排列:1,4,2,3,9,6,5,8,7.按规格移动后,数据排列:9,1,8,2,7,3,6,4,5。形参n中存放a所指数中的数据的个数
源码以下
#include    <stdio.h>
#define    N    9
/**********found**********/
void fun(int  ___1___, int  n)
{  int  i, j, max, min, px, pn, t;
/**********found**********/
   for (i=0; i<n-1; i+=___2___)
   {  max = min = a[i];
      px = pn = i;
/**********found**********/
      for (j=___3___; j<n; j++)
      {  if (max < a[j])
         {  max = a[j]; px = j;  }
         if (min > a[j])
         {  min = a[j]; pn = j;  }
      }
      if (px != i)
      {  t = a[i]; a[i] = max; a[px] = t;
         if (pn == i) pn= px;
      }
      if (pn != i+1)
      {   t = a[i+1]; a[i+1] = min; a[pn] = t; }
   }
}
main()
{  int  b[N]={1,4,2,3,9,6,5,8,7}, i;
   printf("\nThe original data  :\n");
   for (i=0; i<N; i++)  printf("%4d ", b[i]);
   printf("\n");
   fun(b, N);
   printf("\nThe data after moving  :\n");
   for (i=0; i<N; i++)  printf("%4d ", b[i]);
   printf("\n");
}
谁知道怎么做
2009-09-15 19:30
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:10 
第一个空( *a )
第二个空( 2  )
第三个空( i+1)

努力—前进—变老—退休—入土
2009-09-15 20:47
何人我
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-9-15
收藏
得分:0 
谢谢你
2009-09-15 21:58
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:10 
看到一个很好的题,写了半天,没调出来。大家一起研究看看。
大学英语4级考试,想知道全校第3名学生的成绩是多少?
如果最高分有好多个学生,则相同成绩的学生都算第一名;同理,如果第二高分的有多个学生,都算第二名。
当然这是简单题,请你快速编一个程序找到第3名的成绩。

输入:输入有多组,每组有2行,第一行是学生人数N(1<=N<10000),第二行有N个整数,分别表示每个学生的成绩(0到1e9)。当输入的N为0的时候结束程序。

输出:对于每组输入,输出只有一行,即第3名学生的成绩,如果找不到,则输出No such score !

Sample input:
10
90 84 90 60 70 65 73 85 98 98
5
90 90 89 90 90
0

Sample output:
85
No such score !


我的想法是用二叉树,然后递归rank

个人感觉算法还 ok这里是我的code

但是貌似调不过

程序代码:
#include<iostream>                                                                                                           
using namespace std;                                                                                                         
struct BiNode{                                                                                                               
    long key;                                                                                                                
    BiNode *pre;                                                                                                             
    BiNode *next;                                                                                                            
    BiNode(long n){ key =n ;pre=NULL; next=NULL;}                                                                            
};                                                                                                                           
class BiTree{                                                                                                                
private:                                                                                                                     
    static int Rank;                                                                                                         
    void BiTreeInsert(BiNode *&root,long n)                                                                                  
        {                                                                                                                    
            if( NULL == root)                                                                                                
            {                                                                                                                
                root= new BiNode(n);                                                                                         
            }                                                                                                                
            else                                                                                                             
            {                                                                                                                
                if( root->key < n )                                                                                          
                    root->pre=new BiNode(n);                                                                                 
                if(root->key >n )                                                                                            
                    root->next=new BiNode(n);                                                                                
                if( root->key == n)                                                                                          
                    return ;                                                                                                 
            }                                                                                                                
        }                                                                                                                    
    void BiTreeRank(BiNode * root, int r , long & key)                                                                       
        {                                                                                                                    
            if( NULL == root)                                                                                                
            {                                                                                                                
                return ;                                                                                                     
            }                                                                                                                
            else                                                                                                             
            {                                                                                                                
                BiTreeRank( root->next, r , key);                                                                            
                Rank++;                                                                                                      
                if( Rank == r)                                                                                               
                    key=root->key;                                                                                           
                BiTreeRank( root->pre, r, key);                                                                              
            }                                                                                                                
        }                                                                                                                    
    void BiTreeShow(BiNode * root )                                                                                          
        {                                                                                                                    
            if(NULL == root)                                                                                                 
                return ;                                                                                                     
            BiTreeShow(root->pre);                                                                                           
            cout<<root->key<<" ";                                                                                            
            BiTreeShow(root->next);                                                                                          
        }                                                                                                                    
    void BiTreeDestroy(BiNode *root){                                                                                        
        if( NULL == root)                                                                                                    
            return ;                                                                                                         
        BiTreeDestroy(root->pre);                                                                                            
        BiTreeDestroy(root->next);                                                                                           
        delete root;                                                                                                         
    }                                                                                                                        
public:                                                                                                                      
    BiNode *root;                                                                                                            
    BiTree(){ root = NULL ;}                                                                                                 
    ~BiTree()                                                                                                                
        {                                                                                                                    
            // BiTreeDestroy(root);                                                                                          
        }                                                                                                                    
    void insert(long n){ BiTreeInsert(root, n);}                                                                             
    long rank(int r)
        {
            long k;
            BiTreeRank(root,r, k);
            return k;
        }
    void show(){ BiTreeShow( root);}
};
int BiTree::Rank=0;
int main()
{
    int n;
    long key;
    while(cin>>n)
    {
        if ( 0 == n)
            break;
        BiTree *tree=new BiTree();
        for( int i=0;i<n;i++)
        {
            cin>>key;
            tree->insert(key);
        }

        tree->show();
        cout<<endl;
        int rank=-1;
        rank=tree->rank(1);
        if( -1 == rank )
            cout<<"NO such score!"<<endl;
        else
            cout<<rank<<endl;
    }
    return 0;
}


哪位高人帮check一下。
2009-09-15 22:06
快速回复:排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017571 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved