關於C++冒泡排序法


下面的程序有什么問題嗎?為什么結果不正確?
#include<iostream.h>

void Paixu(int Array[],int size)
{
   size=sizeof(Array)/sizeof(*Array);
   for(int i=1;i<size;i++)
   {
   for(int j=0;j<size-i;j++)
   {
   if(Array[j]>Array[j+1])
   {
   int temp=Array[j+1];
   Array[j+1]=Array[j];
   Array[j]=temp;
   }
   }
   }

   for(i=0;i<size;i++)
   cout<<Array[i]<<",";
   cout<<endl;
}

void main()
{
int a[9]={4,3,2,5,1,6,9,7,8};
Paixu(a,9);
}

12 个解决方案

#1


該回復於2011-12-07 10:32:32被版主刪除

#2


void Paixu(int Array[],int size)
{
 //  size=sizeof(Array)/sizeof(*Array); // 去掉試試看
  for(int i=1;i<size;i++)
  {
for(int j=0;j<size-i;j++)
{
if(Array[j]>Array[j+1])
{
int temp=Array[j+1];
Array[j+1]=Array[j];
Array[j]=temp;
}
}
  }

#3


我試過了,去掉是可以,但是為什么不去掉就有問題呢?

#4


#include<iostream>
using namespace std;

void Paixu(int Array[],int size)
{
//size=sizeof(Array)/sizeof(*Array);
for(int i=1;i<size;i++)
{
for(int j=0;j<size-i;j++)
{
if(Array[j]>Array[j+1])
{
int temp=Array[j+1];
Array[j+1]=Array[j];
Array[j]=temp;
}
}
}

for(int i=0;i<size;i++)
cout<<Array[i]<<",";
cout<<endl;
}

int main()
{
int a[9]={4,3,2,5,1,6,9,7,8};
Paixu(a,9);
}


#5


筆試中的改錯題目,經常出現LZ的代碼

#include<iostream>


void Paixu(int Array[], int size)
{
    int i;
    for(i=1; i<size; i++)
    {
        for(int j=0;j <size-i; j++)
        {
            if(Array[j]>Array[j+1])
            {
                int temp=Array[j+1];
                Array[j+1]=Array[j];
                Array[j]=temp;
            }
        }
    }

    for(i=0; i < size; i++)
        std::cout << Array[i] <<",";
    std::cout << std::endl;
}

void main()
{
    int a[9]= {4,3,2,5,1,6,9,7,8} ;
    Paixu(a,9);
}

#6


引用 3 樓 hulifangjiayou 的回復:
我試過了,去掉是可以,但是為什么不去掉就有問題呢?

數組作為參數時,退化為指針。

#7


size=sizeof(Array)/sizeof(*Array);
加上這句之后,size=1了。后面的排序當然會出錯
sizeof(array),對數組首地址求長度=4
sizeof(*Array)對首元素求長度。是int型。也是4啊。所以size=1。這樣能明白了不?
 

#8


void Paixu(int (&Array)[9],int size) 改成這樣;


size=sizeof(Array)/sizeof(*Array);
這句代碼中的Array已經退化成指針了,而不是數組了,計算出的size肯定不是數組大小了。size為1了。

#9


我來冒泡

#10


int [] 在參數中 被當做int*.

#11


雖然不是很了解其中的原理,但是可以從直觀的角度來考慮,樓主的排序函數有兩個參數,size完全可以直接通過實參傳遞得到相應的值就沒必要再重新賦值了。

還有看了上面的回答覺得很有道理的一條就是數組作為實參傳遞的時候傳遞的是地址(也就是指針),這樣在子函數里面size的值就恆為一,也就不滿足樓主本來要計算的數組長度。

#12


ding!\
樓主可以結貼了

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: