指针数组为字符串排序
代码文件:点击下载
#include <stdio.h> void show(char** str, int n); //打印指针数组常量字符串的内容 void bubble_sort(char** str, int n, int(*func)(char*, char*)); //冒泡排序 void quicksort(char** str, int n, int(*func)(char*, char*)); //快速排序 int ascending_sort(char* str1, char* str2); //判断指针数组串升 int descending_sort(char* str1, char* str2); //判断指针数组串降 void main() { char* str[] = { "beijing","guangdong","shanghai" }; int len = sizeof(str)/sizeof(str[0]); //计算指针数组的步长 show(str, len); /*冒泡排序测试*/ /* bubble_sort(str, len, ascending_sort); show(str, len); bubble_sort(str, len, descending_sort); show(str, len); */ /*快速排序测试*/ quicksort(str, len, ascending_sort); show(str, len); quicksort(str, len, descending_sort); show(str, len); } /********************************************** * 头文件:#include <stdio.h> * 功 能:打印指针数组常量字符串的内容 * 函 数:void show(char** str, int n) * 参 数:str是指针数组,n是指针数组的步长 * 返回值:无 **********************************************/ void show(char** str,int n) { int i = 0; for (i = 0; i < n; i++) { printf("%d)%s\n", i+1, str[i]); } printf("-------------------------\n"); } /********************************************** * 头文件:#include <string.h> * 功 能:判断字符串大小 * 函 数:int ascending_sort(char *str1,char *str2) * 参 数:str1是字符串1,str2是字符串2 * 返回值:正数:字符串2小于字符串1 * 负数:字符串1大于字符串2 * 0 :字符串1等于字符串2 **********************************************/ int ascending_sort(char* str1, char* str2) { return strcmp(str1, str2); } /********************************************** * 头文件:#include <string.h> * 功 能:判断字符串大小 * 函 数:int descending_sort(char *str1,char *str2) * 参 数:str1是字符串1,str2是字符串2 * 返回值:正数:字符串2小于字符串1 * 负数:字符串1大于字符串2 * 0 :字符串1等于字符串2 **********************************************/ int descending_sort(char* str1, char* str2) { return strcmp(str2, str1); } /********************************************** * 头文件:无 * 功 能:给字符串排序 * 函 数:void bubble_sort(char **str,int n,int(*func)(int,int)) * 参 数:str是传进的指针数组,n是 * 返回值:无 * 方 式:冒泡排序法 **********************************************/ void bubble_sort(char** str, int n, int(*func)(char*, char*)) { char *temp; //temp中间地址 int i, j, flag; //flag标志位 for (i = 1; i < n; i++) { flag = 1; for (j = 0; j < n - i; j++) { if (func(str[j], str[i]) > 0) { flag = 0; temp = str[i]; str[i] = str[j]; str[j] = temp; } } if (!flag) { break; } } } /********************************************** * 头文件:无 * 功 能:给字符串排序 * 函 数:void quicksort(char **str,int n,int(*func)(int,int)) * 参 数:str是传进的指针数组,n是 * 返回值:无 * 方 式:快速排序法 **********************************************/ void quicksort(char** str, int n, int(*func)(char*, char*)) { char* temp; //temp中间地址 int i, j, min; //min 差下标 for (i = 0; i < n - 1; i++) { min = i; for (j = i + 1; j < n; j++) { if (func(str[j], str[i]) > 0) { min = j; } } if (min != i) { temp = str[i]; str[i] = str[min]; str[min] = temp; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通