堆排序的過程是首先建立小頂堆(或者大頂堆),這個堆的特徵是根節點不大於(或者不小於)任何子節點。建立之後就可以通過每次取出堆中的第乙個元素(這個堆的最小值或最大值)然後將新的堆調整從而下次再取第乙個這種迴圈操作來得到乙個有序的序列。
在建立堆的過程中都是從最後乙個根節點開始,因為純葉子節點不用處理,它已經是小頂堆了(因為沒有子節點所以也滿足特徵),處理完乙個根節點,就接著處理上乙個一直到第乙個元素。
堆的調整過程是首先把最後乙個元素放到第乙個元素位置處(因為第乙個我們已經取出來了),之後從第乙個元素開始「下沉」,下沉的意義是把大的數往下移這樣處理完一遍之後首元素又是這個堆中的最小值了,我們再取出來。
我比較了堆排序與氣泡排序的效能,列印了時間戳。在資料量比較大的時候確實差的很多,乙個o(n*logn)乙個o(n*n)嘛。
具體code如下所示:
#include #include #include #include void heap_down(unsigned int* a, int i, int n)
else
--j;
if (a[i] > a[j])
else
return;
}void create_heap(unsigned int* a, int n)
void heap_sort(unsigned int* a, int n)
}void bubble_sort(unsigned int *num, int n)
} }return;
}int main(int argc, char* argv)
fclose(f1);
fclose(f2);
delete p;
delete p1;
return 0;
}
選擇排序與氣泡排序的比較
選擇排序 selection sort 演算法核心思想 每一趟在n i 1 i 1 個記錄中選取關鍵字最小的記錄作為序列中的第i個記錄 簡單選擇操作 通過n i次關鍵字間的比較,從n i 1個記錄中選出關鍵字最小的記錄,並和第i 1 i n 個記錄交換之,先看乙個依選擇排序思想的 int selec...
選擇排序與氣泡排序區別與比較
每一趟從待排序的資料元素中選出最小 或最大 的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。如果在 c 語言中去實現選擇排序,我們最常見的就是兩層迴圈的實現方式。從選擇排序的思想出發,我們都不難看出 n s圖如下 演算法如下 for i 0,n 2...
Python氣泡排序 快速排序 堆排序
氣泡排序 def bubble sort array,n for i in range n for j in range 1 n i if array j 1 array j array j 1 array j array j array j 1 快速排序 def quick sort array,...