堆排序:
利用最大堆/最小堆完成排序
用陣列儲存,但邏輯結構為 完全二叉樹
heapelem arr = ;
物理結構:
邏輯結構:
i = 3 (要調整的結點)
j= i*2+1 (左孩子結點)
對 3 7 8 進行判斷,已符合最小堆規則 則不調整 break
arr[i] = tmp;
–pos // 開始迴圈調整 2位置的 while(pos>=0)
普通結構堆排序
#include
#include
typedef
int heapelem ; // 定義堆排序時資料型別
template
void swap(type &a,type &b) // 交換函式
void fileterdown(heapelem *p,int start,int end) // 向下調整
p[i] = tmp;
}void makeminheap(heapelem *p ,int n)
int end = n-1 ; // 找出最後乙個結點下標
int pos = (end -1)/2; // pos為end的雙親結點
while(pos>=0)
}void heap_sort(heapelem *p,int n)
}void printheap(heapelem *p ,int n)
printf("\n");
}void main()
; int n = sizeof(arr)/sizeof(arr[0]);
makeminheap(arr,n);
heap_sort(arr,n);
printheap(arr,n);
}
測試結果:
堆排序 堆排序優化 索引堆排序
堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...
堆排序 堆排序優化 索引堆排序
堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...
資料結構 堆排序 堆排序 Heap Sort
堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...