堆排序,我不知道我的代码有什么问题,它没有输出正确的顺序
heap sort,I can't figure out what's wrong with my code,which doesn't output right order
#include<iostream>
using namespace std;
int heapSize;
void maxHeapify(int a[],int n,int i)
{
int l=2*i+1;
int r=2*i+2;
int largest=i;
if(l<heapSize&&a[l]>a[i]) largest=l;
if(r<heapSize&&a[r]>a[i]) largest=r;
if(largest!=i)
{
swap(a[i],a[largest]);
maxHeapify(a,n,largest);
}
}
void heapSort(int a[],int n)
{
heapSize=n;
for(int i=n/2;i>=0;i--)maxHeapify(a,n,i);
for(int i=n-1;i>=1;i--)
{
swap(a[0],a[i]);
heapSize--;
maxHeapify(a,n,0);
}
}
int main()
{
int a[]={1,2,3,7,9,15,13,11};
heapSort(a,8);
for(int i=0;i<8;i++)cout<<a[i]<<" ";
return 0;
}
输出:1 2 7 11 15 3 9 13
我想实现堆排序,但是出了点问题,我调试了好几个小时,我找不到更多的错误,可能逻辑有问题,也想不通我的代码有什么问题,它没有输出正确的顺序。
在您的 maxHeapify 函数中,您错过了将堆的右侧 child 与当前最大的进行比较。您的函数将是
void maxHeapify(int a[], int n, int i) {
int l = 2 * i + 1;
int r = 2 * i + 2;
int largest = i;
if(l < heapSize && a[l] > a[i]) largest = l;
if(r < heapSize && a[r] > a[largest]) largest = r;
if(largest! = i)
{
swap(a[i], a[largest]);
maxHeapify(a, n, largest);
}
}
#include<iostream>
using namespace std;
int heapSize;
void maxHeapify(int a[],int n,int i)
{
int l=2*i+1;
int r=2*i+2;
int largest=i;
if(l<heapSize&&a[l]>a[i]) largest=l;
if(r<heapSize&&a[r]>a[i]) largest=r;
if(largest!=i)
{
swap(a[i],a[largest]);
maxHeapify(a,n,largest);
}
}
void heapSort(int a[],int n)
{
heapSize=n;
for(int i=n/2;i>=0;i--)maxHeapify(a,n,i);
for(int i=n-1;i>=1;i--)
{
swap(a[0],a[i]);
heapSize--;
maxHeapify(a,n,0);
}
}
int main()
{
int a[]={1,2,3,7,9,15,13,11};
heapSort(a,8);
for(int i=0;i<8;i++)cout<<a[i]<<" ";
return 0;
}
输出:1 2 7 11 15 3 9 13
我想实现堆排序,但是出了点问题,我调试了好几个小时,我找不到更多的错误,可能逻辑有问题,也想不通我的代码有什么问题,它没有输出正确的顺序。
在您的 maxHeapify 函数中,您错过了将堆的右侧 child 与当前最大的进行比较。您的函数将是
void maxHeapify(int a[], int n, int i) {
int l = 2 * i + 1;
int r = 2 * i + 2;
int largest = i;
if(l < heapSize && a[l] > a[i]) largest = l;
if(r < heapSize && a[r] > a[largest]) largest = r;
if(largest! = i)
{
swap(a[i], a[largest]);
maxHeapify(a, n, largest);
}
}