字符串排序算法
2023-12-15 05:54:04
题目描述:
题目描述
设计一个程序,实现对输入字符串数组按字符串长度进行排序功能。具体要求如下:
编写函数void sortByLength(char *strArray[], int numStrings);,用于对输入的字符串数组 strArray 按字符串长度进行升序排序。
在主程序中,接受用户输入的字符串数组,然后调用函数进行排序。
输出排序后的字符串数组。
第一行输入字符串数量n(n<=20)
第2-(n+1)行输入字符串,每个字符串长度不超过100
说明:相同长度的字符串排序按照输入顺序排序
示例输入1:
4
Apple
Banana
Orange
Grapes
示例输出1:
Apple
Banana
Orange
Grapes
算法一:
思路:
代码实现:
# include<stdio.h>
# include<string.h>
# include<stdlib.h>
void sortByLength(char *pStr[], int numStrings){
char *temp;
//冒泡排序
for(int i=0;i<numStrings;i++){
for(int j=i;j<numStrings;j++){
if(strlen(pStr[i])>strlen(pStr[j])){
temp = pStr[i];
pStr[i] = pStr[j];
pStr[j] = temp;
}
}
}
}
int main(){
int n;
scanf("%d",&n);
char *strArray[n];//设置指针数组
for(int i=0;i<n;i++){
//每层赋值
strArray[i]=(char*)malloc(sizeof(char)*100);
scanf("%s",strArray[i]);
}
sortByLength(strArray,n);//排序
for(int i=0;i<n;i++){
//输出与free
printf("%s\n",strArray[i]);
free(strArray[i]);
strArray[i]=NULL;
}
printf("\n");
}
算法二:
思路:
代码实现:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void sortByLength(char *strArray[], int numStrings) {
// 使用冒泡排序对字符串数组按长度进行升序排序
for (int i = 0; i < numStrings - 1; i++) {
for (int j = 0; j < numStrings - i - 1; j++) {
if (strlen(strArray[j]) > strlen(strArray[j + 1])) {
// 交换字符串指针
char *temp = strArray[j];
strArray[j] = strArray[j + 1];
strArray[j + 1] = temp;
}
}
}
}
int main() {
int numStrings;
// 输入字符串数量
scanf("%d", &numStrings);
char *strArray[numStrings];
char inputString[100]; // 用于存储每行输入的字符串
// 输入字符串
for (int i = 0; i < numStrings; i++) {
scanf("%s", inputString);
// strArray[i] = strdup(inputString); // 使用strdup复制字符串,确保字符串的生命周期足够长
strArray[i] = (char*)malloc(sizeof(char) * 100);
strcpy(strArray[i], inputString);
}
// 调用排序函数
sortByLength(strArray, numStrings);
// 输出排序后的字符串数组
for (int i = 0; i < numStrings; i++) {
printf("%s\n", strArray[i]);
free(strArray[i]); // 必须free
strArray[i] = NULL; // 置空野指针
}
return 0;
}
算法三:
思路:
将冒泡排序替换为qsort
关键在于比较函数cmp的实现,易错点见下注释
代码实现:
# include<stdio.h>
# include<string.h>
# include<stdlib.h>
int cmp(const void *a,const void *b){
//ps.不可以写成strlen((char*)a)-strlen((char*)b);
return strlen(*(char**)a)-strlen(*(char**)b);
}
void sortByLength(char *strArray[], int numStrings) {
qsort(strArray,numStrings,sizeof(char*),cmp);//排序
}
int main(){
int n;
scanf("%d",&n);
char *strArraay[n];//指针数组
for(int i=0;i<n;i++){//分配空间
strArraay[i]=(char*)malloc(sizeof(char)*100);
scanf("%s",strArraay[i]);
}
sortByLength(strArraay,n);//排序
for(int i=0;i<n;i++){
//输出和free
printf("%s\n",strArraay[i]);
free(strArraay[i]);
strArraay[i]=NULL;
}
return 0;
}
文章来源:https://blog.csdn.net/Xudong_12345/article/details/135006780
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!