用qsort對字串陣列排序需要注意的幾個問題

2021-06-29 11:42:03 字數 990 閱讀 1204

qsort是萬能陣列排序函式,必須要學會使用,簡單的陣列自然不用說,這裡主要討論一下字串陣列的使用。

首先看一下qsort的原型:

void qsort(void *base, size_t nmemb, size_t size,

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

正確使用這個函式要注意幾點:

1.base要傳陣列的首位址

2.size傳的是每個元素的大小

3.正確編寫compar函式

下面是實際應用:

乙個字串陣列:*str[max],假設裡面現在儲存了n個字串了。

首先要正確理解什麼是字串陣列,簡單的說,可以理解成它就是乙個陣列,只不過其中的元素是一串字串,而訪問這些字串,得用指標,也就是它們的位址,比如*name=,那麼訪問其中的字串就是name[0],name[1]...這裡就有個容易混淆的地方了,對於字串陣列,那麼每個元素的大小到底是多少呢?對name[0]來說,到底是字串「james」的長度5,還是char*的大小4呢?答案應該是4,因為字串陣列裡面儲存的是各個字串的指標,所以回到上面所說的第二點注意,用qsort的時候應該要傳sizeof(char *);

第二,編寫compar函式比較字串有地方要注意:

不能把strcmp本身傳給qsort,即不能寫strcmp(p,q),因為形參是const void*型別,同理,寫成strcmp((char *)p, (char *)q);也是無效的;正確的寫法應該是:strcmp(*(char **)p, *(char **)q);先強制轉換成char**,在用*減少一層間接定址操作:

int compar_words(const void *p, const void *q)

qsort(str, n, sizeof(char *), compar);

由此可見,小小的乙個qsort使用,對基本概念的理解得比較深刻。由此可見基礎紮實的重要性^_^

氣泡排序對字串陣列排序

給定乙個字串排序 以字母為準,比如 a b或者b 同字母的情況,小寫字母大於大寫字母,比如 a a private static void testcomparestring 使用do while boolean ischanged int nmaxindex asource.length 1 st...

對字串排序

def main 字串 s helloworld 轉換成陣列 l list s 對陣列排序,注意,該方法沒有返回值 l.sort 轉換成陣列 s join l print s 結果如下 hwdellloor if name main main 然後sort再join。def main s hello...

字串陣列排序

1,給定乙個字串陣列。按照字典順序進行從小到大的排序。思路 1,對陣列排序。可以用選擇,冒泡都行。2,for巢狀和比較以及換位。3,問題 以前排的是整數,比較用的比較運算子,可是現在是字串物件。字串物件怎麼比較呢?物件中提供了用於字串物件比較的功能。compareto 方法。public class...