0
void sort_vector ()
    {
        int i, j;

        for ( i = 0; i < _num_vrsVector; ++i )
        {
            for ( j = i+1; j < _num_vrsVector; ++j )
            {
                if ( _vrsVector[i]->_phase > _vrsVector[j]->_phase ) {
                    swap_vector ( &_vrsVector[i], &_vrsVector[j] );
                }
            }
        }
    }
void swap_vector (struct vrsVector **p, struct vrsVector **q )
{
    struct vrsVector *temp;

    temp = *p;
    *p = *q;
    *q = temp;
}

我的问题是哪种方法更好地对 C 中指向结构对象的指针数组进行排序。上面的代码进行比较,然后进行交换。我知道的另一种方法是使用"QSORT"。我想知道我使用了哪些方法刚才提到的更好地对指向对象的指针数组进行排序?

4

2 回答 2

2

我会使用图书馆里的东西,除非你需要理由不这样做。一般来说,这是一个很好的规则来进行排序或其他任何事情。如果您发现它不符合您的要求,请寻找替代方案,但您的默认立场应该是“其他人做得比我做得更好”。(或者,如果你的自我不能接受,“我的工作是为我的企业/用户提供 X。我从事“X”的业务,无论我多么擅长,都不编写排序例程”)。

TL;DR:qsort 是“最好的”

于 2013-07-29T06:21:49.580 回答
-1

我还想从算法的角度评论您的问题。您提供的使用交换的排序算法称为冒泡排序。冒泡排序的运行时间为 O(n^2)。稍微简化一下,这意味着如果将输入数组的大小加倍,则排序算法的运行时间会平方。

qsort(),这是 CAR Hoare 或快速排序算法的标准 C 库实现,如果 O(n lg n) 则具有运行时间复杂度。这意味着(有点简化)运行时将增加运行时 n lg n,这将在 n 变大时节省大量时间。(如评论所述,qsort()可以使用其他排序算法来实现。)

请注意,快速排序并不总是会因为快速排序 O(n lg n) 而冒泡排序为 O(n^2) 而击败冒泡排序。这是因为对于较小的 n 值,O(n^2) 实际运行时间可能小于 O(n lg n)。然而,总会有一个如此之大的 n,以至于无论如何快速排序都会击败冒泡排序。

我推荐一本关于算法、数据结构、算法设计和运行时分析的基础书籍。Robert Sedgwick 写了一些关于这个主题的好书。强烈推荐。

于 2013-07-29T07:34:34.897 回答