如何借助strcmp()函数实现C语言字符串数组的插入排序?
用strcmp()实现字符串的插入排序
插入排序的核心逻辑是将未排序区间的元素逐一插入到已排序区间的正确位置,针对字符串的排序,我们可以借助C标准库的strcmp()函数判断字典序关系,进而完成排序。
核心逻辑说明
strcmp(str1, str2)的返回值直接对应字符串的字典序:
- 返回值 < 0:
str1的字典序小于str2 - 返回值 == 0:两个字符串完全相等
- 返回值 > 0:
str1的字典序大于str2
完整实现代码
#include <stdio.h> #include <string.h> // 对字符串数组进行插入排序 void insertionSort(char** arr, int n) { int i, j; char* key; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; // 向前遍历已排序区间,找到key的插入位置 while (j >= 0 && strcmp(arr[j], key) > 0) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } // 测试函数 int main() { char* strs[] = {"banana", "apple", "cherry", "date", "blueberry"}; int n = sizeof(strs) / sizeof(strs[0]); printf("排序前的字符串数组:\n"); for (int i = 0; i < n; i++) { printf("%s ", strs[i]); } printf("\n"); insertionSort(strs, n); printf("排序后的字符串数组:\n"); for (int i = 0; i < n; i++) { printf("%s ", strs[i]); } printf("\n"); return 0; }
代码关键点解析
- 参数传递:这里用
char** arr接收字符串数组,因为每个元素是char*类型的字符串指针。 - 插入逻辑:每次取出未排序的第一个字符串作为
key,然后向前和已排序的字符串比较——如果前面的字符串字典序更大(strcmp(arr[j], key) > 0),就将其向后移动一位,直到找到key应该插入的位置。 - 注意事项:
- 如果使用二维字符数组(比如
char strs[5][20]),代码逻辑类似,但需要用strcpy()来移动字符串,而不是直接赋值指针。 strcmp()是区分大小写的,如果需要忽略大小写排序,可以使用POSIX标准的strcasecmp()函数,或者自己实现不区分大小写的字符串比较逻辑。
- 如果使用二维字符数组(比如
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

