| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 634 人关注过本帖
标题:表格排序该怎么写呢
只看楼主 加入收藏
小小paper
Rank: 1
等 级:新手上路
帖 子:15
专家分:6
注 册:2010-11-23
结帖率:66.67%
收藏
已结贴  问题点数:0 回复次数:6 
表格排序该怎么写呢
名称   数据
      20
      10
      15
      30



根据数据的大小排序,这该怎么写呢
2011-04-30 16:25
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:15 
总的思路有两种:
一种是给主键,比如说认为数据那列是主键,那么就以那列为准排序,其它列无视。遇到主键值一样的,或者保持原来的顺序(即原来在前的还在前,原来在后的还在后,这种排序称为是稳定排序)或者就是不稳定的排序。
还一种就是按主序排列。即不同的元素之间有偏序关系。比如认为数据比名称重要,但名称也不是没有意义。以数据为主排序,但当数据一致时,名称小的则靠前。这种情况没有稳不稳定的说法,因为关系表中不充许有完全相同的两行。
反正不管怎么说,都是实现一个比较函数,能确定两组数据的大小关系。

另外如果你这个问题问的不是这方面的,那么即是说你在排序的实现上有困难。
是不是就是交換两数数据不太会?这个和你用的数据结构很有关系,如果你的链表,那么改改指针就行了。如果是数组之类的话,就得整体拷贝交換。
还跟你用的排序算法有关,总之不同的情况处理方法就很不一样了。
2011-04-30 18:28
小小paper
Rank: 1
等 级:新手上路
帖 子:15
专家分:6
注 册:2010-11-23
收藏
得分:0 
我用函数重载定义了大于、小于、等于号,指针指向数据来比较大小。每一行是定义的类,然后在比较时就不知道该怎写了?这怎么写呢?
2011-05-01 18:08
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
类可以重载 operator= 呀,然后就可以向正常的那样排序了。
如果你的数据结构比较特殊(比如是指针指着的内存块,那么交换其实只要交換指针就行了,没必要拷贝),也可以加个叫 swap() 的成员函数用来交換两个元素。
2011-05-01 19:12
小小paper
Rank: 1
等 级:新手上路
帖 子:15
专家分:6
注 册:2010-11-23
收藏
得分:0 
#include<stdio.h>
#include<string>
#include<iostream>
#include<fstream>
using namespace std;



//定义一个球类
class  football
{
        int coursenum;
        char name[15];
        int matchnum, losenum, winnum, equnum ;
        int innum, outnum;
        int credit;
    public:
        football(int c, char n[15], int m, int l, int w, int e, int i, int o,int cre)
        {
            coursenum=c;
            strcpy(name,n);
            matchnum=m;
            losenum=l;
            winnum=w;
            equnum=e;
            innum=i;
            outnum=o;
            credit=cre;
        }
        void setcoursenum(int coursenum)
        {
            this->coursenum=coursenum;
        }
        void setname(char name[15])
        {
            strcpy(this->name,name);
        }
        int getcoursenum()
        {
            return coursenum;
        }
        string getname()
        {
            return name;
        }
        int getcredit()
        {
            return credit;
        }
        int getlosenum()
        {
            return losenum;
        }
        int getwinnum()
        {
            return winnum;
        }
        int getequnum()
        {
            return equnum;
        }
        int getinnum()
        {
            return innum;
        }
        int getoutnum()
        {
            return outnum;
        }
        void setresault(int n1,int n2)
        {
            innum+=n1;
            outnum+=n2;
            if(n1>n2)
            {
                credit+=3;
                winnum++;
            }
            else if(n1==n2)
            {
                credit++;
                equnum++;
            }
            else
            {
                losenum++;
            }
        }
};






//排序函数
bool paixu(football f[],int N)
{
    int i,j;
    football temp;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N-1-i;j++)
            if(f[j].credit<f[j+1].credit)
            {
                temp=f[i];
                f[i]=f[i+1];
                f[i+1]=temp;
            }
    }
}



嘿嘿,麻烦运行一下,这该怎么改呢???




2011-05-02 16:36
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:5 
你没发现你的排序算法写错了,你这样的构造函数好麻烦的。无法以集合的形式定义,你可以给它一个默认值,重载>>,重载=,重载<,那么比较时就可以是f[i]<f[i+1]了,重载<<输出。

离恨恰如春草,更行更远还生。
2011-05-02 17:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
写了一个示例程序你自己体会呗~
程序代码:
#include <iostream>
#include <string>
using namespace std;

class A {
public:
    A(const int n, const char *m)
        : num(n), name(m) {}
    A(const A &b)
        : num(b.num), name(b.name) {}
    ~A() {}

    bool operator<(const A &b) const         // 重载这个
    { return num < b.num ? true : (num == b.num && name < b.name); }

    void swap(A &b)             // 和这个函数,程序就好写了。
    {
        int t = num; num = b.num; b.num = t;
        name.swap(b.name);
    }

    friend ostream &operator<< (ostream &, const A &);

private:
    int num;
    string name;
};

ostream &operator<< (ostream &out, const A &a)
{
    out << a.num << ": " << a.name;
    return out;
}

void sort(A x[], int n)         // 排列基本还是用你写的。
{
    int i, j;
    for (i = 0; i < n-1; i++)
        for (j = 0; j < n-i-1; j++)
        {
            if (x[j+1] < x[j])
                x[j].swap(x[j+1]);
        }
}

int main(int argc, char *argv[])
{
    A test[5] = {
        A(1, "b"),
        A(1, "a"),
        A(2, "b"),
        A(5, "a"),
        A(0, "z"),
    };

    sort(test, 5);

    int i;
    for (i = 0; i < 5; i++) {
        cout << test[i] << endl;
    }

    return 0;
}

加点注释~~


[ 本帖最后由 pangding 于 2011-5-2 20:50 编辑 ]
2011-05-02 20:48
快速回复:表格排序该怎么写呢
数据加载中...
 
   



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

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