簡體   English   中英

C ++中的heapsort實現

[英]heapsort implementation in c++

我有以下堆排序代碼

#include <iostream>
using namespace std;
void exch(int a[],int i,int j){
      int s=a[i];
      a[i]=a[j];
      a[j]=s;
        }
void sink(int a[],int k,int n){
 //int n=sizeof(a)/sizeof(int);
 while(2*k<=n){
  int j=2*k;
  if (j<n && (a[j]<a[j+1])) j++;
  if (a[k]>=a[j]) break;
  exch(a,k,j);
  k=j;


 }
   }


  void heapsort(int a[]){
   int n=sizeof(a)/sizeof(int);
    for (int k=n/2;k>=1;k--)
             sink(a,k,n);
    while(n>1){
     exch(a,1,n--);
                sink(a,1,n);


    }

        }
int main(){

    int  a[]={12,3,5,1,67,10,9.20};
    int n=sizeof(a)/sizeof(int);
    heapsort(a);

           for (int i=0;i<n;i++){
            cout<<a[i]<<"  ";


           }
              return 0;


}

但是結果表明我看起來像這樣

12  3  5  1  67  10  9  Press any key to continue . . .

還看起來在我的數組總數是8,在這里它顯示了7作為輸出,我認為這個問題的核心應該是

1>c:\users\datuashvili\documents\visual studio 2010\projects\heap\heap\heap.cpp(36): warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data

它表明從雙精度轉換為int強制代碼時可能會丟失數據,我是對還是錯?請幫助我

您寫了一個. 代替的,在9和20之間:

int  a[]={12,3,5,1,67,10,9.20};

結果是7個數字,最后一個是將9.20轉換為intdouble

此外,此代碼是錯誤的:

void heapsort(int a[]){
    int n=sizeof(a)/sizeof(int);

數組參數實際上是作為指針傳遞的,因此sizeof(a)不會為您提供正確的結果。 您應該傳入數組大小作為附加參數。

我立即可以看到的一個問題是:

void heapsort(int a[]){
   int n=sizeof(a)/sizeof(int);

您不能將整個數組作為參數傳遞給C / C ++中的函數。 當然,參數語法int a[]令人困惑,但是實際上它等效於int* a 堆排序()不能知道數組到其尺寸a分。 您必須將大小作為單獨的參數傳遞。

除了所有其他注釋( sizeof(a) ,將[]作為參數傳遞,在init列表中帶有. )之外,您還想編寫C ++代碼,對嗎? 但是,除了iostream以外,它看起來都相當C'ish。 那里:

  • 使用#include <vector> std::vector<int> (例如,添加帶有push_back元素)
  • 將其作為參考傳遞,即void heapsort(std::vector<int> &a)
  • 考慮使用std::swap( a[i], a[j] ); 而不是exch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM