排序 问题

今天在csdn论坛中,看到几个题目。分析并解答。 

FoxPro数据库编程题   如下:
1、通过键盘输入20个数。(1)求其中最大者和最小者,并显示之;
                                                (2)将这20个数依从大到小排序,并显示排序结果。

原贴见:http://topic.csdn.net/u/20080116/20/1a6830dc-0657-4dcb-8d86-3f6155b3f7fe.html

本人解答如下:

SET TALK OFF
CLEA ALL
CLEA

k=20  &&表示需要处理的数据个数
DIME N(k)
*输入k个数,并赋值给数组n
FOR i=1 TO k
    INPUT "请输入第 "+STR(i,2)+" 个数:  " TO N(i)
ENDFOR

*找出最大值和最小值
tmax=N(1)
tmin=N(1)
FOR i=2 TO k
    tmax=MAX(tmax,N(i))
    tmin=MIN(tmin,N(i))
    *  也可用比较运算符,按以下运算
    IF tmax<N(i)
        tmax=N(i)
    ENDIF
    IF tmin>N(i)
        tmin=N(i)
    ENDIF
ENDFOR
? "最大的数是:",tmax
? "最小的数是:",tmin

*从大到小排列
DIME nn(k) &&用另一个数组来保存排序后的结果
FOR i=1 TO k
    nn(i)=N(i)
ENDFOR

FOR i=1 TO k
    FOR j=i+1 TO k
        IF nn(i)<nn(j)
            T=nn(i)
            nn(i)=nn(j)
            nn(j)=T
        ENDIF
    ENDFOR
ENDFOR
? "序号","原数","排序后"
FOR i=1 TO k
    ?i, N(i),nn(i)
ENDFOR

以上程序,主要是为了帮助初学者理解而编写的,实际上还可以优化与精简。

在   注1处,如果不想用min   和max函数,可以将以下两行 
        tmax=MAX(tmax,N(i))
        tmin=MIN(tmin,N(i))
改为:
          *     也可用比较运算符,按以下运算
          IF   tmax <N(i)
                    tmax=N(i)
          ENDIF
          IF   tmin> N(i)
                    tmin=N(i)
          ENDIF

如果借助于数据表,看以下程序,应该更容易理解,效率也比较高。

***********************************************************

SET TALK OFF
SET SAFE OFF
CLEA ALL
CLEA
* 建立个表, 整数部分15位,小数部分3位。可根据实际需要来确定位数
CREA CURSOR _temp (数据 N (19,3))

k=20  &&表示需要处理的数据个数
i=1
*输入k个数,并赋值给数组n
DO WHILE .T.
    INPUT "请输入第 "+STR(i,2)+" 个数:  " TO N
    IF TYPE("N")="N"
        APPE BLAN
        REPL 数据 WITH N
        i=i+1
    ELSE
        ? "   您输入的数据类型不正确,只能输入数字!"
    ENDIF
    IF i>k  &&只输入 k 个数据
        EXIT
    ENDIF
ENDDO


INDE ON -数据 TO _l  && 注意,“数据”这个字段前加个负号,表示对数值型字段按降序排列
GO TOP
? "最大的数是:",数据
GO BOTT
? "最小的数是:",数据

LIST &&显示结果是从大到小

***********************************************************
当然,最后建立索引、排序那几行,通过SQL语句来实现也是可以的。


发布了24 篇原创文章 · 获赞 5 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/cdbqss1/article/details/2047788