程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 堆排序程序(編寫時有幾個錯誤點,見注釋,已通過dev c++調試通過)

堆排序程序(編寫時有幾個錯誤點,見注釋,已通過dev c++調試通過)

編輯:C++入門知識

#include <stdio.h>  
#include <conio.h> 
void HeapAdjust(int a[],int s,int n)//大頂堆  
{  
     int temp=a[s];  
     for(int j=2*s;j<=n;j*=2)  
     {  
             if(j<n&&a[j]<a[j+1]) j++;  
             if(temp>a[j]) break;//這個錯誤點困擾了我好長時間。temp寫成a[s]了,忘記了s[s]會發生變化。  
             a[s]=a[j];//一開始顛倒了  
             s=j;  
     }  
     a[s]=temp;  
               

void HeapSort(int a[],int len)  
{  
     for(int i=len/2;i>0;--i)  
     {  
             HeapAdjust(a,i,len);  
     }//建一個初始堆  
     for(int i=len;i>1;--i)  
     {  
          int temp=a[1];  
          a[1]=a[i];  
          a[i]=temp;  
           
          HeapAdjust(a,1,i-1);  
     }  
}  
int main()  
{  
     int a[11]={0,9,8,7,1,6,4,3,5,2,0};  
     printf("初始序列");  
      for(int i=1;i<11;i++)  
     {  
             printf("%d ",a[i]);  
     }  
      
     HeapSort(a,10);  
     printf("排序後的序列");  
     for(int i=1;i<11;i++)  
     {  
             printf("%d ",a[i]);  
     }  
     getch();  
     return 0;  
           

摘自:不喜歡熬夜的coder blog

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved