为何这个冒泡排序只进行一次?感觉代码没问题呀【求助~】
感觉应该没问题的,可是我的vs2010执行完,只进行了依次排序,也就是说只把最大值移到了最右边,求教
#include <stdio.h>void sort( int * p, int len);void sort( int * p, int len){ int a, b, temp = 0; for ( a=0; a<len-1; ++a) { for ( b=0; b<len-1-a; ++b) { if (p[a]>p[a+1]) { temp = p[a]; p[a] = p[a+1]; p[a+1] = temp; } } }}int main(void){ int a[6]; int i; printf("请输入六个整数\n"); for ( i=0; i <6; i++){ scanf("%d",&a[i]); } printf("这六个数字依次是:\n"); for ( i=0; i <6; i++){ printf("%d\t",a[i]); } printf("\n经过排序后这六个数字依次是:\n"); sort (a,6); for ( i=0; i <6; i++){ printf("%d\t",a[i]); } return 0;}
if (p[b]>p[b+1]) { temp = p[b]; p[b] = p[b+1]; p[b+1] = temp; }
[解决办法]
同学 if 语句内 因该用b 来作为索引吧? 你填错了
for ( b=0; b<len-1-a; ++b)
{
if (p[a]>p[a+1])
{
temp = p[a];
p[a] = p[a+1];
p[a+1] = temp;
}
}
[解决办法]
#include <stdio.h>void sort( int * p, int len);void sort( int * p, int len){ int a, b, temp = 0; for ( a=0; a<len-1; ++a) { for ( b=0; b<len-1-a; ++b) { if (p[b]>p[b+1]) { temp = p[b]; p[b] = p[b+1]; p[b+1] = temp; } } }}int main(void){ int a[6]; int i; printf("请输入六个整数\n"); for ( i=0; i <6; i++){ scanf("%d",&a[i]); } printf("这六个数字依次是:\n"); for ( i=0; i <6; i++){ printf("%d\t",a[i]); } printf("\n经过排序后这六个数字依次是:\n"); sort (a,6); for ( i=0; i <6; i++){ printf("%d\t",a[i]); } return 0;}