编程实现从键盘输入10个数据,对这10个数据进行从大到小排序并输出。用冒泡排序完成。(要求输出每一趟的中间结果)
不知道你这个问题是否已经解决, 如果还没有解决的话:选择法排序:指每次选择所要排序的数组中的最大值(由小到大排序则选择最小值)的数组元素,将这个数组元素的值与最前面没有进行排序的数组元素的值互换。
程序设计:在改例中变量i代表每次排序所选择的数组元素的值,用变量j遍历未排序的数组中的元素。若符合条件,则交换两者的值。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int i,j;
int t;
int a[10];
printf("Please Enter ten number:");
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < 10; i++)
{
for (j = i+1; j < 10; j++)
{
if (a[j] < a[i])
{
t = a[j]; a[j] = a[i]; a[i] = t;
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
system("pause");
return 0;
}
调试结果如下:
请帮我编写一段程序,让用户能够通过键盘输入10个数字,并进行冒泡排序。请确保排序过程中,中间结果逐步展示,最终按照从大到小的顺序输出排好序的结果。
def bubble_sort(nums):
"""
冒泡排序
"""
n = len(nums)
for i in range(n-1):
flag = False # 标记,如果本趟没有交换元素,则说明已有序
for j in range(n-1-i): # 第i趟排序后,已经排好i个元素,内循环比较至n-i-1
if nums[j] < nums[j+1]: # 如果前一个元素比后一个元素小,则交换位置
nums[j], nums[j+1] = nums[j+1], nums[j]
flag = True # 本趟有交换,说明还未完全有序
if not flag: # 本趟无交换,说明已有序
break
print(nums) # 输出排序过程中的中间结果
if __name__ == '__main__':
nums = []
for i in range(10):
num = int(input("请输入第%d个数字:" % (i+1)))
nums.append(num)
bubble_sort(nums)
print("排序完成!结果为:", end='')
for num in nums:
print(num, end=' ')
运行效果:
输入:
请输入第1个数字:8
请输入第2个数字:2
请输入第3个数字:5
请输入第4个数字:9
请输入第5个数字:1
请输入第6个数字:3
请输入第7个数字:7
请输入第8个数字:6
请输入第9个数字:4
请输入第10个数字:0
输出:
[8, 5, 9, 2, 3, 7, 6, 4, 1, 0]
[8, 9, 5, 3, 7, 6, 4, 2, 1, 0]
[9, 8, 5, 7, 6, 4, 3, 2, 1, 0]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # 因为已经有序,因此排序结束
排序完成!结果为:9 8 7 6 5 4 3 2 1 0