快速排序结构数组c ++的方法

时间:2015-01-28 23:48:37

标签: c++ arrays sorting struct

我有一个名为count的结构,声称为count,其中包含两个内容,一个名为frequency的字符串和一个名为word的字符串。为了简化,我的程序将一本书作为文本文件,我计算每个单词出现的次数。我有一个结构数组,我有我的程序,每次出现一个单词时它将计算在哪里,现在我想要一个更快的方法来排序顶级频率的数组比我下面的方式。我使用了下面的冒泡排序算法,但是使用这种方法运行我的代码太长了。任何其他建议或帮助将是受欢迎的!我从算法库中查找了一下,但是我不明白我将如何在这里使用它。我是c ++的新手,所以很多关于如何使用sort的解释会有很多帮助。

void sortArray(struct count array[],int size)
{
    int cur_pos = 0;
    string the_word;
    bool flag= true;

    for(int i=0; i<(size); i++)
    {
        flag = false;
        for(int j=0; j< (size); j++)
        {
            if((array[j+1].frequency)>(array[j].frequency))
            {
                cur_pos = array[j].frequency;
                the_word = array[j].word;
                array[j].frequency = array[j+1].frequency;
                array[j].word = array[j+1].word;
                array[j+1].frequency = cur_pos;
                array[j+1].word = the_word;
                flag = true;
            }
        }
    }
};

2 个答案:

答案 0 :(得分:1)

您只需要为结构定义较少的运算符, 并使用std :: sort,参见示例:

http://en.wikipedia.org/wiki/Sort_%28C%2B%2B%29

答案 1 :(得分:0)

为数据集创建一对后,可以使用std :: map作为容器并将对插入其中。如果你想根据频率定义std:map按如下方式排序

std :: map myMap; myMap.insert(标准:: make_pair(频率,单词));

std :: map在内部使用二叉树,因此您在检索时会得到一个已排序的数据。