a<9-a-1
->
a<9-i-1
你的第二层循环的条件写错啦,因为每轮都会有一个数字被排好,因此第二层循环还需要比较的数字就是9-i-1!
冒泡还可以这样写:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[100];
int n;
cin>>n;//输入排序长度
for(int i=1;i<=n;i++) cin>>a[i];//输入排序数组
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++)
{
if(a[j]<a[i]) swap(a[i],a[j]);
}
}
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
还有如果需要排序的话,用C++已经写好的函数就行啦。
格式sort(起始元素,结束元素)//从小到大把数组排一遍序
问题分析:
在这段代码中,冒泡排序的实现看起来是正确的。它使用两个嵌套的循环来遍历数组并交换相邻的元素,以实现从小到大的排序。
然而,根据问题描述,后面四个数字没有发生变化。这可能是由于不正确的数组大小导致的。
在冒泡排序的内循环中,通过 n-i-1
控制每轮比较的次数。但是,在这段代码中,数组的大小是固定的,即 n = 7
。所以,内循环应该是 j < n-1
,而不是 j < n-i-1
,以确保所有元素都被正确比较和交换。
我的建议是将 bubbleSort
函数的内循环条件修改为 j < n-1
:
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
这样修改后再次运行代码,数组应该会按照预期进行排序。
请尝试以上修改,并告知我结果。如果还有其他问题,请随时向我提问。