堆排序

来源:互联网 发布:sqlserver触发器语法 编辑:程序博客网 时间:2024/05/18 16:39

如果集合k={K0 ,K1K2,。。。。。,Kn-1,},将其按完全二叉树的顺序存储方式存放在一个维数组中,并且满足

Ki   < =  K2i+1   , Ki   < =  K2i+2  其形式就是根结点小于其子结点,这种形式称为小根堆,当然根结点大于其子结点,则为大根堆

创建一个小根堆,开始的形式为数组   A[8]={53,17,78,9,45,65,87,23};

树的形式为  

#include "stdafx.h"#include <stdio.h>#include <stdlib.h>typedef struct minHeap{int heap[40];int currentSize;};void siftDown(minHeap &H ,int i,int m){int j=0;int temp = H.heap[i];for(  j=2*i+1 ; j<=m; j=2*j+1  ){if(j<m&&H.heap[j]>H.heap[j+1])j++;if(H.heap[j]<temp){H.heap[i] =H.heap[j];i = j;}else break;}H.heap[i] = temp;}void createMinHeap(minHeap &H , int A[] ,int n){  int i=0;for(i = 0;i<n;i++){H.heap[i] = A[i];}H.currentSize = n;int currentPos = (n-2)/2;while(currentPos>=0){siftDown(H,currentPos,H.currentSize-1);currentPos-- ;}}void main(){minHeap H;int i=0;int A[8]={53,17,78,9,45,65,87,23};createMinHeap(H , A ,8);for(i=0;i<8;i++){printf("%d \n " ,H.heap[i]);}}
程序运行后,形成小根堆


原创粉丝点击