2、编写程序,使用列表保存键盘输人的一组数据,对给列表数据使用冒泡算法进行升序排序(要求使用循环嵌套实现,不使用排序函数、方法)。 分别输出排序前和排序后的列表内容。
时间: 2024-09-19 13:04:33 浏览: 41
在Python中,我们可以创建一个函数来实现冒泡排序算法,然后通过用户输入获取数据并进行排序。以下是代码示例:
```python
def bubble_sort(lst):
n = len(lst)
# 遍历所有数组元素
for i in range(n):
# 每轮遍历都将最大值"浮"到列表末尾
for j in range(0, n-i-1):
# 如果当前元素大于下一个元素,交换它们的位置
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1], lst[j]
return lst
# 获取用户输入的数据,假设用户会输入一串逗号分隔的整数
unsorted_list = input("请输入一组数据,用逗号分隔:").split(',')
unsorted_list = [int(num) for num in unsorted_list]
# 对数据进行排序
sorted_list = bubble_sort(unsorted_list)
# 输出排序前的列表
print("排序前的列表:", unsorted_list)
# 输出排序后的列表
print("排序后的列表:", sorted_list)
相关问题
编写程序,使用列表保存键盘输入的一组数据,对给列表数据使用冒泡算法进行升序排序(要求使用循环嵌套实现,不使用排序函数、方法)。分别输出排序前和排序后的列表内容。
在Python中,你可以通过以下代码实现冒泡排序算法来对输入的数据进行升序排序:
```python
def bubble_sort(lst):
n = len(lst)
for i in range(n): # 外层循环控制轮数
for j in range(0, n-i-1): # 内层循环从头遍历到未排序部分的末尾
if lst[j] > lst[j+1]: # 如果当前元素大于下一个元素,交换它们的位置
lst[j], lst[j+1] = lst[j+1], lst[j]
return lst
# 获取用户输入
input_data = [int(i) for i in input("请输入一组数据,以逗号分隔:").split(",")]
# 排序前的数据
unsorted_list = copy.deepcopy(input_data)
print("排序前的列表:", unsorted_list)
# 对数据进行排序
sorted_list = bubble_sort(input_data)
print("排序后的列表:", sorted_list)
#
编写一个使用字符型指针数组对学生姓名字符串进行排序的程序。 写一个程序,把键盘输入的一组学生的姓名字符串存入一个字符型指针数组中,然后选择一种排序方法对其进行升序排序。要求字符型指针数组中的每个指针指向的空间都要动态申请。 提示:可以先用一个字符型数组过渡,接受键盘输入的字符串,再根据字符串的长度动态申请空间,并让字符指针数组的指针指向它,最后再把字符数组中的字符串复制到指针所指向的空间。
下面是一个使用字符型指针数组对学生姓名字符串进行排序的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LENGTH 100
#define MAX_STUDENTS 10
void sortNames(char** names, int numStudents);
void swap(char** a, char** b);
int main() {
char** names;
int numStudents, i;
printf("请输入学生人数:");
scanf("%d", &numStudents);
// 动态申请字符型指针数组的内存空间
names = (char**)malloc(numStudents * sizeof(char*));
// 读取学生姓名并动态申请内存空间
for (i = 0; i < numStudents; i++) {
char tempName[MAX_NAME_LENGTH];
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", tempName);
// 动态申请内存空间
names[i] = (char*)malloc((strlen(tempName) + 1) * sizeof(char));
// 复制字符串到动态申请的内存空间
strcpy(names[i], tempName);
}
// 对学生姓名进行排序
sortNames(names, numStudents);
// 打印排序后的学生姓名
printf("排序后的学生姓名为:\n");
for (i = 0; i < numStudents; i++) {
printf("%s\n", names[i]);
}
// 释放动态申请的内存空间
for (i = 0; i < numStudents; i++) {
free(names[i]);
}
free(names);
return 0;
}
// 使用冒泡排序对学生姓名进行升序排序
void sortNames(char** names, int numStudents) {
int i, j;
for (i = 0; i < numStudents - 1; i++) {
for (j = 0; j < numStudents - i - 1; j++) {
if (strcmp(names[j], names[j + 1]) > 0) {
swap(&names[j], &names[j + 1]);
}
}
}
}
// 交换两个指针的值
void swap(char** a, char** b) {
char* temp = *a;
*a = *b;
*b = temp;
}
```
这个程序会先读取学生的人数,然后动态申请一个字符型指针数组的内存空间。接着,循环读取每个学生的姓名,动态申请内存空间,并将输入的姓名复制到动态申请的内存空间中。然后,使用冒泡排序对学生姓名进行升序排序,并打印排序后的学生姓名。最后,释放动态申请的内存空间。
请注意,这个示例程序使用冒泡排序进行排序,你也可以使用其他排序算法来实现。
阅读全文