用指针数组表示一组学生的姓名,要求用冒泡排序法按升序对其实现排序,并输出排序的结果
时间: 2023-05-31 15:20:08 浏览: 117
汇编语言课程设计冒泡法排序
5星 · 资源好评率100%
### 回答1:
可以先定义一个指针数组,每个指针指向一个字符串,表示学生的姓名。然后使用冒泡排序法对指针数组进行排序,最后输出排序后的结果即可。
具体实现如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
#define MAX_NAME_LEN 20
void bubble_sort(char *names[], int n) {
int i, j;
char *temp;
for (i = ; i < n - 1; i++) {
for (j = ; j < n - i - 1; j++) {
if (strcmp(names[j], names[j+1]) > ) {
temp = names[j];
names[j] = names[j+1];
names[j+1] = temp;
}
}
}
}
int main() {
char *names[MAX_STUDENTS];
int n, i;
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入学生姓名:\n");
for (i = ; i < n; i++) {
char *name = (char *)malloc(MAX_NAME_LEN * sizeof(char));
scanf("%s", name);
names[i] = name;
}
bubble_sort(names, n);
printf("排序后的结果为:\n");
for (i = ; i < n; i++) {
printf("%s\n", names[i]);
}
return ;
}
```
注意,在输入学生姓名时,需要为每个姓名动态分配内存空间,否则会出现指针指向错误的情况。在输出排序结果时,需要逐个输出指针指向的字符串,而不是指针本身。
### 回答2:
指针数组是将多个指针存储在一个数组中,可以很方便地对多个变量进行操作。用指针数组表示一组学生的姓名,可以用以下代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const int num = 5;
char* ptr[num] = {"Mike", "Lily", "Tom", "Jack", "Lucy"};
// 冒泡排序
for(int i = 0; i < num - 1; ++i)
{
for(int j = 0; j < num - i - 1; ++j)
{
if(strcmp(ptr[j], ptr[j + 1]) > 0)
{
swap(ptr[j], ptr[j + 1]);
}
}
}
// 输出排序后的结果
for(int i = 0; i < num; ++i)
{
cout << ptr[i] << endl;
}
return 0;
}
```
首先定义了一个指针数组`ptr`,其中存储了5个学生的姓名。然后用冒泡排序法按升序对其进行排序。在排序过程中,使用了字符串比较函数`strcmp`来比较两个姓名的大小关系,如果前一个姓名比后一个姓名大,则交换两者的位置。排序完成后,再依次输出排序结果即可。
冒泡排序法的时间复杂度为O(n^2),在排序较大的数据时效率较低,可以考虑使用更高效的排序算法。
### 回答3:
指针数组是指一个数组中存储的是指针变量。该数组的每个元素都可以看作是一个指针变量,这个指针可以指向不同的数据地址。在本题中,我们可以使用指针数组来表示一组学生的姓名。
首先,我们可以定义一个指针数组,每个元素为一个指向字符数组的指针,表示一个学生的姓名。例如:
```
char* names[] = {"Tom", "Jerry", "Alice", "Bob"};
```
接下来,我们可以使用冒泡排序法对这个指针数组进行升序排序。冒泡排序法的基本思想是将相邻的元素进行比较,如果前面的元素大于后面的元素,则交换它们的位置。这样一轮下来,最后一个元素就是数组中的最大值。然后再次从头开始进行比较,直到所有元素都排好序为止。
这里需要注意的是,我们要使用指针来访问每个元素,而不是直接访问存储在数组中的值。因为我们要交换指针指向的地址,而不是交换字符数组中的值。
代码实现如下:
```
#include <stdio.h>
#include <string.h>
int main() {
char* names[] = {"Tom", "Jerry", "Alice", "Bob"};
int len = sizeof(names) / sizeof(names[0]);
int i, j;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - i - 1; j++) {
if (strcmp(names[j], names[j+1]) > 0) {
// 交换指向的地址
char* temp = names[j];
names[j] = names[j+1];
names[j+1] = temp;
}
}
}
// 输出排序后的结果
for (i = 0; i < len; i++) {
printf("%s ", names[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
Alice Bob Jerry Tom
```
阅读全文