冒泡里的n

冒泡里的n
偶然遇到一个有意思的问题,先记下来

 1
#include  < stdio.h >
 2
 3 #define  MAX 10
 4 int  a[MAX];
 5 int  rand_seed  =   10 ;
 6
 7 // return 0~32767间一个随机数字
 8 int  rand()
 9 {
10    rand_seed = rand_seed * 110351245 + 12345;
11    return (unsigned int)(rand_seed / 65536% 32768;
12}

13
14 void  bubble_sort( int  a[], const   int  n)
15 {
16    int i,j,t;
17    
18    for(i=0; i < n; i++)
19    {
20        for(j = n - 1; j >= i; j--)
21        {
22            if(a[j] < a[j-1])
23            {
24                t = a[j];
25                a[j] = a[j-1];
26                a[j-1= t;
27            }

28        }

29    }

30}

31
32 int  main()
33 {
34    int i,j;
35        
36    // fill array
37    for (i=0; i < MAX; i++)
38    {
39        a[i] = rand();
40        printf("%d ",a[i]);
41    }

42    printf("\n");
43    bubble_sort(a, MAX);
44    
45    for(j = 0; j < MAX); j++)
46    {
47        printf("%d ",a[j]);
48    }

49
50        return 0;
51}
输出结果:

16838 8723 13221 18534 18069 4560 3644 29292 25286 16198

3644 4560 8723 13221 16198 16838 18069 18534 25286 29292


若将bubble_sort如下定义
void  bubble_sort( int  a[])  // 与前者的区别是少传一个参数n
{
    
int i,j,t;
    
int n = sizeof(a) / sizeof(a[0]);  //数组大小在函数内部获取    
for(i=0; i < n; i++)
    
{
        
for(j = n - 1; j >= i; j--)
        
{
            
if(a[j] < a[j-1])
            
{
                t 
= a[j];
                a[j] 
= a[j-1];
                a[j
-1= t;
            }

        }

    }

}
再调用排序
int  main()
{
    
int i,j;
        
    
// fill array
    for (i=0; i < MAX; i++)
    
{
        a[i] 
= rand();
        printf(
"%d ",a[i]);
    }

    printf(
"\n");
    bubble_sort(a);
    
    
for(j = 0; j < sizeof(a) / sizeof(a[0]); j++)
    
{
        printf(
"%d ",a[j]);
    }

        
return 0;
}
输出结果没有排序

16838 8723 13221 18534 18069 4560 3644 29292 25286 16198
16838 8723 13221 18534 18069 4560 3644 29292 25286 16198

n的奥妙啊。。

你可能感兴趣的:(冒泡里的n)