堆排序-C++
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
#include<bits/stdc++.h> using namespace std; //节点调整 void adjustHeap(int arrays[],int i,int len){ int temp = arrays[i];//先取出当前元素i for(int k=i*2+1;k<len;k=k*2+1){//从i结点的左子结点开始,也就是2i+1处开始 if(k+1<len && arrays[k]<arrays[k+1]){//如果左子结点小于右子结点,k指向右子结点 k++; } if(arrays[k] >temp){//如果子节点大于父节点,将子节点值赋给父节点(不用进行交换) arrays[i] = arrays[k]; i = k; }else{ break; } } arrays[i] = temp;//将temp值放到最终的位置 } //调整为大顶堆 void adjustTree(int arrays[],int len){ for(int i=len/2-1;i>=0;i--){ //调整节点 adjustHeap(arrays,i,len); } } void swap(int arrays[],int a ,int b){ int temp=arrays[a]; arrays[a] = arrays[b]; arrays[b] = temp; } //排序,经过一次调整以后,第一个位子的数最大 void heapsort(int arrays[],int len){ adjustTree(arrays,len); for(int j=len-1;j>0;j--){ swap(arrays,0,j);//将堆顶元素与末尾元素进行交换 adjustHeap(arrays,0,j);//重新对交换的这一个枝节进行调整 } } int main(){ clock_t time_start=clock(); int arrays[10]={5,8,6,3,4,7,9,1,0,2}; heapsort(arrays,10); for(int a:arrays){ cout<<a<<endl; } clock_t time_end=clock(); cout<<1000*(time_end-time_start)/(double)CLOCKS_PER_SEC<<"ms"<<endl; }

浙公网安备 33010602011771号