ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PTA基础编程题目集 7-30字符串的冒泡排序(C++语言实现)

PTA基础编程题目集 7-30字符串的冒泡排序(C++语言实现) 摘要本文是PTA编程题字符串的冒泡排序的题解涵盖题目描述、输入输出格式及C语言实现展示基于strcmp比较字符串字典序进行冒泡排序K趟后输出中间结果的方法。题目描述我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列并对任意给定的KN输出扫描完第K遍后的中间结果序列。输入格式输入在第1行中给出N和K1≤KN≤100此后N行每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。输出格式输出冒泡排序法扫描完第K遍后的中间结果序列每行包含一个字符串。输入样例6 2 best cat east a free day输出样例best a cat day east free解题思路核心问题分析将冒泡排序算法扩展到字符串序列按字典序升序排列字符串执行K趟排序后输出中间结果。关键点在于使用strcmp函数比较字符串字典序使用strcpy函数交换字符串内容。算法原理说明使用二维字符数组存储N个字符串外层循环控制K趟排序内层循环逐对比较相邻字符串。strcmp(a,b)0表示a的字典序大于b时需要交换位置。交换时通过临时字符数组和strcpy函数完成两个字符串的整体拷贝交换。第i趟排序后末尾i个字符串已有序。具体计算步骤读入N字符串数和K排序趟数逐行读入N个字符串存入二维数组strs外层i从0到K-1执行K趟冒泡排序第i趟内层j从0到n-2-i用strcmp比较strs[j]和strs[j1]若前者字典序大则用strcpy交换K趟排序后逐行输出数组中的所有字符串代码部分实现#includeiostream#includecstringusingnamespacestd;intmain(){intn,k;cinnk;charstrs[100][11];for(inti0;in;i){cinstrs[i];}for(inti0;ik;i){for(intj0;jn-1-i;j){if(strcmp(strs[j],strs[j1])0){chartemp[11];strcpy(temp,strs[j]);strcpy(strs[j],strs[j1]);strcpy(strs[j1],temp);}}}for(inti0;in;i){coutstrs[i]endl;}return0;}代码流程说明输入数据读入n和k然后逐行读入n个字符串存入二维字符数组strs每行最多10字符结束符共11字节K趟冒泡排序外层i从0到k-1共k趟内层j从0到n-2-i用strcmp比较相邻两个字符串字典序字符串交换若strcmp返回值0表示前串大于后串需交换通过临时数组temp配合strcpy完成两个字符串的内容拷贝交换输出结果遍历二维数组每行输出一个字符串即K趟排序后的中间结果代码流程图是是是否否否是否开始读入字符串数n和趟数k逐行读入n个字符串存入二维数组i0趟数未达k?j0内层循环未结束?前串字典序大于后串?复制交换两字符串内容j加1i加1i0未遍历完所有字符串?输出当前字符串并换行i加1结束解题流程图是否输入N个字符串和K值第1趟冒泡排序开始相邻字符串按字典序比较交换趟数未达K?执行下一趟排序末尾字符串渐有序趟数加1获得K趟后的中间字符串序列逐行输出每个字符串结束
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进