[英]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轉換為int
的double
。
此外,此代碼是錯誤的:
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.