簡體   English   中英

用qsort或替代交換方法在C中使用排序算法對結構對象的指針數組進行排序

[英]Sorting Algorithm in C with qsort or alternate swap method to sort array of pointers to struct objects

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中的structs對象的指針數組進行排序。上面的代碼是進行比較,然后進行交換。我知道的另一種方法是使用"QSORT" 。我想知道我剛剛提到的方法更適合對對象的指針數組進行排序?

除非您有理由不這樣做,否則我會使用庫中的某些內容。 通常,這是遵循排序或其他任何內容的好規則。 如果您發現它不符合您的要求,請找到替代方法,但您的默認立場應該是“其他人比我做得更好。” (或者,如果您的自我不能接受,“我的工作是向我的企業/用戶提供X。我從事的是“ X”,不管我做的多么出色都不編寫排序例程“)。

TL; DR:qsort是“最好的”

我還想從算法角度評論您的問題。 您提供的使用交換的排序算法稱為冒泡排序。 冒泡排序的運行時稱為O(n ^ 2)。 稍微簡化一下,這意味着如果將輸入數組的大小加倍,則排序算法的運行時間將平方。

qsort()是CAR Hoare或quicksort算法的標准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)為此主題寫了一些好書。 強烈推薦。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM