下面是我用c語言實現的小根堆排序演算法實現,有注釋。空間複雜度僅為o(1). 陣列中0也存元素。
個人認為利用堆排序可以查詢出陣列中重複的2個元素,因為排好序後,陣列中重複的2個元素一定是相鄰的2個元素,即最多隻需要比較n-1次即可找出。
#include
int heapdown(int,int,int);
/*構造初始堆*/
int buildheap(int a,int n)
}/**
目前元素的子堆是小根堆,需要從目前元素開始向下調整
*/int heapdown(int a,int n,int j)
}else /*左右都在*/
if(min!=k) /*需要調整*/
break; /*不需要調整,調整完成*/
}/*while(1)*/
}int main()
;int n = 7;
int i = 0;
int tmp = 0;
buildheap(a,6); /*構造初始堆*/
for(i = 0;i<7;i++) /*排序前陣列列印*/
printf("i=[%d],",a[i]);
for(i=0;i<(n-1);i++)
printf("\n"); /*排序後陣列列印*/
for(i = 0;i<7;i++)
printf("i=[%d],",a[i]);
return 0;
}
c 小根堆陣列實現
主要功能 最小堆排序 大到小 void order 刪除首元素 type fetch root 插入元素 void insert item const type item void insert item faster const type item 快速版本 關鍵 source code file...
小根堆 陣列實現
特點 父節點永遠比孩子節點小,不強制要求左孩子比右孩子小,但是為了實現方便,我令其左孩子比右孩子小。反之為大根堆。push 插入元素 陣列長度增加 注意 增加的不是本次插入所需要的位置,而是下次元素的位置,這句話能解釋為什麼pop的時候需要 se才能拿到當前堆中的最後乙個元素 從下往上判斷是否滿足小...
c語言實現小根堆
小根堆的實現 邏輯模型是乙個完全二叉樹 儲存模型是給vector 索引下標從0開始 1 如果i 0,結點i是根結點,無父結點 否則結點i的父結點為結點 i 1 2 2 如果2i 1 n 1,則結點i無左子女 否則結點i的左子女為結點2i 1 3 如果2i 2 n 1,則結點i無右子女 否則結點i的右...