想用冒泡法排序,但是没有实现,请问是哪里出了问题呢?
#include
main()
{
int a[10];
for(int i=0;i<10;++i){
scanf("%d",&a[i]);
}
for(int i=0;i<9;++i){
for(int j=1;j<10;++j){
if(a[i]>a[j]){
int t;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<10;++i){
printf("%d,",a[i]);
}
}
经过一趟排序后,最后一个数已经是最大值了,不用再参与排序,将内循环次数每次减少一次就行了。
例如:
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
for (int i = 0; i < 10; ++i) {
scanf("%d", &arr[i]);
}
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]); //计算元素的个数
for (i = 0; i < sz; i++)//这里确定趟数,为元素个数-1躺;
{
int j = 0;
for (j = 0; j < sz - i - 1; j++)//确定对数,每经过一趟就-1对,且为趟数-1;
{
if (arr[j] > arr[j + 1])
{
int tmp = 0;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);//打印出数组;
}
return 0;
}
#include<stdio.h>
main()
{
int a[10];
for(int i=0;i<10;++i){
scanf("%d",&a[i]);
}
for(int i=0;i<9;++i){
for(int j= 0 ; j < 9 - i; j ++){
if(a[j]>a[j + 1]){
int t;
t=a[j];
a[j]=a[j + 1];
a[j + 1]=t;
}
}
}
for(int i=0;i<10;++i){
printf("%d,",a[i]);
}
}