C語言 再也不寫排序演算法

2021-10-08 01:50:49 字數 1457 閱讀 3770

在c語言乙個小專案裡面,大多數情況我們都是選擇自己造車輪,比如需要自己寫乙個排序演算法或者鍊錶,這樣的過程在學習的時候動手是充滿意義的,但是到了大專案之中,用標準庫和別人封裝好的演算法不香嗎?倘若蓋一棟樓之前,連每乙個磚塊都需要我們挖土燒磚,那麼這是多麼可怕巨大的工程量。

所屬標準庫stdlib.h

c 庫函式void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))對陣列進行排序。

下面是 qsort() 函式的宣告。

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
該函式不返回任何值。

下面的例項演示了 qsort() 函式的用法。

#include #include int values = ;

int cmpfunc (const void * a, const void * b)

int main()

qsort(values, 5, sizeof(int), cmpfunc);

printf("\n排序之後的列表:\n");

for( n = 0 ; n < 5; n++ )

return(0);

}

compar詳解引數

compar引數指向乙個比較兩個元素的函式。比較函式的原型應該像下面這樣。注意兩個形參必須是const void *型,同時在呼叫compar 函式(compar實質為函式指標,這裡稱它所指向的函式也為compar)時,傳入的實參也必須轉換成const void *型。在compar函式內部會將const void *型轉換成實際型別。

int compar(const void *p1, const void *p2);

如果compar返回值小於0(< 0),那麼p1所指向元素會被排在p2所指向元素的左面;

如果compar返回值等於0(= 0),那麼p1所指向元素與p2所指向元素的順序不確定;

如果compar返回值大於0(> 0),那麼p1所指向元素會被排在p2所指向元素的右面。

讓我們編譯並執行上面的程式,這將產生以下結果:

通常都是採用兩個引數相減的方式。

//從小到大排序

int cmpfunc (const void * a, const void * b)

//從大到小排序

int cmpfunc (const void * a, const void * b)

排序之前的列表:

88 56 100 2 25

排序之後的列表:

2 25 56 88 100

c語言寫歸併排序

歸併排序,在實際開發中,很少用,但是為什麼一定要掌握它,甚至在面試中經常會問到。其實,只是為了更好的理解演算法。歸併排序最核心的就是分治策略,所謂分治,就是把乙個問題,拆分成若干個小問題然後求解。掌握歸併排序以後,在遇到更複雜的問題,我們可以考慮分治策略。歸併排序是穩定的,時間複雜度是o nlogn...

c語言排序演算法

很多朋友是以譚浩強老師編的 c語言教程 作為學習 c語言的入門教程的。書中涉及排序問題一般都以 冒泡法 和 選擇法 實現。為了擴大視野,增加學習程式設計的興趣,我參閱了有關書籍,整理了幾種排序法,寫出來同大家共勉。高手們不要笑,這篇文章是寫給出學者的,而且我自己也是只菜鳥,雖然內容陳舊,但值得初學者...

c語言排序演算法

c語言排序演算法 非穩定的排序演算法 選擇排序 快速排序 希爾排序 堆排序 穩定的排序演算法 氣泡排序 插入排序 歸併排序和基數排序是穩定的排序演算法。讓我們先定義乙個整型陣列a n 下面用五種方法對其從小到大排序。1 冒泡法 冒泡法大家都較熟悉。其原理為從a 0 開始,依次將其和後面的元素比較,若...