程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 算法之堆排序

算法之堆排序

編輯:C++入門知識

堆排序是是指利用堆這種數據結構所設計的一種排序算法。 c語言的實現如下: [cpp]   #include <stdio.h>      #define SIZE 10      //打印數組   void display(int array[],int size){           printf("the array is:");           int i;           for(i=0;i<size;i++){                   printf("%d ",array[i]);           }           printf("\n");   }      //創建堆,使最大的數位於樹根   void createHeap(int array[], int size){           int parent,child,temp;       //剛開始時,parent的值為最後一個父節點,依次往前將斤左右孩子中較大的節點與父節點交換,最後使樹根為最大數           for(parent=(size+1)/2-1;parent>=0;parent--){           //獲取父節點的左孩子                   child = parent*2+1;                              //如果該父節點存在右孩子,並且比做孩子大,則使用右孩子,否則還是使用左孩子                   if((child+1)<=size){                           if(array[child+1] > array[child]){                                   child++;                           }                   }                              //將左右孩子中較大者與父節點交換                   if(array[parent] < array[child]){                           temp = array[parent];                           array[parent] = array[child];                           array[child] = temp;                   }           }   }      //堆排序   void heap(int array[], int size){           int i,temp;           for(i=size-1;i>=0;i--){           //創建堆,使最大的數位於樹根                   createHeap(array,i);           //將樹根和最後一個節點交換                   temp = array[i];                   array[i] = array[0];                   array[0] = temp;                                      display(array,SIZE);           }   }     www.2cto.com int main(void){           int array[SIZE]={34,45,1,39,21,68,65,100,4,51};           display(array,SIZE);       //堆排序函數           heap(array,SIZE);           display(array,SIZE);           return 0;   }    

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