char name[5][20]={"baidu","alibaba","tencent","jd","bytedance"}; [★] 用冒泡排序法将字符串按照名字长度的升序排序
时间: 2023-11-29 15:04:02 浏览: 117
以下是用冒泡排序法将字符串按照名字长度的升序排序的代码实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char name[5][20] = {"baidu", "alibaba", "tencent", "jd", "bytedance"};
int i, j;
char temp[20];
// 冒泡排序
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5 - i - 1; j++)
{
if (strlen(name[j]) > strlen(name[j + 1]))
{
strcpy(temp, name[j]);
strcpy(name[j], name[j + 1]);
strcpy(name[j + 1], temp);
}
}
}
// 输出排序后的结果
for (i = 0; i < 5; i++)
{
printf("%s\n", name[i]);
}
return 0;
}
```
运行结果为:
```
jd
baidu
alibaba
tencent
bytedance
```
相关问题
char name[5][20]={"baidu","alibaba","tencent","jd","bytedance"}; 用冒泡排序法将字符串按照名字长度的升序排序
首先,我们需要明确一点,"char name[5][20]" 是一个二维字符数组,它存储了五个字符串。但是,冒泡排序通常用于整数数组或等长的元素数组,对于字符串长度不一的情况,我们可以先计算每个字符串的长度,然后按照字典序(即ASCII值)进行比较。
由于题目没有直接提到如何处理字符串长度不一致的情况,我们将假设这里只考虑按照字符串的第一个非空字符来进行排序(如果所有字符串都是空串,那么可以简单地按照它们在数组中的顺序)。以下是基本的冒泡排序算法思路:
1. 遍历数组,从第一个元素开始,直到倒数第二个元素。
2. 对于每一对相邻的元素,比较它们的长度,如果前一个元素长度大于后一个,则交换这两个元素的位置。
3. 继续遍历,重复步骤2,直到数组完全排序。
然而,由于字符串长度的比较较为复杂,直接在原始数组上进行冒泡排序可能会导致效率低下。更常见的做法是在另一个辅助数组中存储字符串及其长度,然后对长度进行排序。
下面是一个简单的示例,展示如何用C语言实现这个过程,但请注意,这并不是标准的冒泡排序,因为字符串排序不是典型的冒泡操作:
```c
#include <stdio.h>
#include <string.h>
// 比较两个字符串长度的函数
int compare_lengths(const void *a, const void *b) {
int len1 = strlen(((char(*)[20])a)[0]);
int len2 = strlen(((char(*)[20])b)[0]);
return len1 - len2;
}
void bubble_sort_by_length(char (*names)[20], int n) {
// 使用qsort代替冒泡排序,因为字符串排序不适合冒泡
qsort(names, n, sizeof(char[20]), compare_lengths);
}
int main() {
char name[5][20] = {"baidu", "alibaba", "tencent", "jd", "bytedance"};
int n = sizeof(name)/sizeof(name[0]);
bubble_sort_by_length(name, n);
// 输出排序后的结果
for (int i = 0; i < n; ++i) {
printf("%s\n", name[i]);
}
return 0;
}
```
char name[5][20]={"baidu","alibaba","tencent","jd","bytedance"}; ,用冒泡排序法将字符串按照名字长度的升序排序
可以使用冒泡排序法对字符串按照名字长度的升序排序。具体实现方法如下:
```
#include <stdio.h>
#include <string.h>
int main()
{
char name[5][20] = {"baidu", "alibaba", "tencent", "jd", "bytedance"};
int i, j;
char temp[20];
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4 - i; j++)
{
if (strlen(name[j]) > strlen(name[j + 1]))
{
strcpy(temp, name[j]);
strcpy(name[j], name[j + 1]);
strcpy(name[j + 1], temp);
}
}
}
for (i = 0; i < 5; i++)
{
printf("%s\n", name[i]);
}
return 0;
}
```
在上面的代码中,我们首先定义了一个二维字符数组name,其中包含了5个字符串。然后我们使用了两个for循环来实现冒泡排序,外层循环控制排序的轮数,内层循环控制每一轮比较的次数。在每一轮比较中,我们使用了strlen函数来获取字符串的长度,然后比较两个字符串的长度,如果前一个字符串的长度大于后一个字符串的长度,则交换两个字符串的位置。最后,我们使用for循环遍历排序后的字符串数组,并输出每个字符串。
阅读全文