编写函数实现冒泡法对实型数组从小到大排序。
编写函数实现冒泡法对实型数组从小到大排序。在主函数中首先输入一个整数N(1<N<=100),然后再输入N个实数存入数组中,调用你编写的函数排序后输出数组所有元素。输入样例:
5
23.51.00.6181.142
输出样例:
0.6180 1.0000 1.1420 2.0000 3.5000
这是我的代码
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
double a;
int n,i,j,k,t;
for(i=0;i<N;i++) //遍历输入
scanf("%lf",&a);
for(k=1;k<=N-1;k++) //外层循环表示共n-1趟排序
{
for(i=0;i<N-k;i++) //内层循环进行第k趟排序
if(a>a)
{ //比较交换
t=a;
a=a;
a=t;
}
}
for(i=0;i<N;i++)
{ //遍历输出
if(i>0)
printf(" ");
printf("%.4lf",a);
}
//排序完成
return 0;
}
问题就是有两组数据,如下
第一组测试输入:
5
23.51.00.6181.142
—— 预期输出 ——
0.6180 1.0000 1.1420 2.0000 3.5000
—— 实际输出 ——
0.6180 1.0000 1.1420 2.0000 3.0000
第二组测试输入:
5
1.23 2.13 .3.12 2.31 1.32
—— 预期输出 ——
0.1200 0.3000 1.2300 2.1300 2.3100
—— 实际输出 ——
0.0000 0.0000 1.0000 2.0000 2.3100
请问怎么解决啊
#include <stdio.h>
int main(){
int n;
int i,j;
double temp;
printf("请输入一个整数:");
scanf("%d",&n);
double array;
for (i = 0; i < n; i++){
scanf("%lf",&array);
}
for (i = 0; i < n-1; i++){
for (j = 0; j < n-i-1; j++){ //此处 j < n-i-1
if (array > array){
temp = array;
array = array;
array = temp;
}
}
}
for (i = 0; i < n; i++){
printf("%.4lf ",array);
}
return 0;
}
{:10_310:} 好的,下面是实现冒泡排序的代码:
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1):
for j in range(n - i - 1):
if arr > arr:
arr, arr = arr, arr
# 在主函数中使用该函数进行排序
if __name__ == '__main__':
N = int(input("请输入数组的长度:"))
arr = []
for i in range(N):
num = float(input("请输入第{}个元素的值:".format(i + 1)))
arr.append(num)
print("排序前的数组:", arr)
bubble_sort(arr)
print("排序后的数组:", arr)
以上代码中,我们定义了一个`bubble_sort`函数,对传入的数组进行冒泡排序。然后在主函数中,首先输入一个整数N表示数组的长度,然后循环输入N个数组元素的值。最后调用`bubble_sort`函数对数组进行排序,并打印出排序前后的数组。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2023-12-25 12:49
好的,下面是实现冒泡排序的代码:
gun 王小二° 发表于 2023-12-25 12:50
gun
很抱歉,似乎您的输入有误。"gun"是什么意思?请问有什么问题我可以帮助您解答吗?
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 问题出在变量 t,你定义的是 int,但数组 a 是 double。 小甲鱼的二师兄 发表于 2023-12-25 15:43
问题出在变量 t,你定义的是 int,但数组 a 是 double。
第二组测试数组,第三个数前面多了一个点,怎么解决吗 王小二° 发表于 2023-12-25 16:00
第二组测试数组,第三个数前面多了一个点,怎么解决吗
那个点一看就是录入的时候不小心多敲的呀,哪有 .3.12 这样的数?
页:
[1]