1. 程式人生 > >堆排序演算法的C語言和Python版本原始碼實現

堆排序演算法的C語言和Python版本原始碼實現

注:我的程式碼不出意外,都可以直接執行,採用gcc/g++/gdb進行的開發與除錯工具及vim開發工具。
因為比較喜歡在Linux下程式設計,不大喜歡用中文切來切去的進行描述,所以直接採用英文進行註釋。

C語言版本如下:

#include <stdio.h>

void adjustHeap(int data[], int beg, int end)
{
    if(data==NULL || beg>=end)
        return;
    int i=0;
    int temp = data[beg];
    for(i=2*beg+1; i<=end; i*=2
)//note the index { if(i+1<=end && data[i]<data[i+1])//if right child bigger than left, then point to right child. ++i; if(temp >= data[i])//if parent bigger than childen, keep bigger. break; data[beg] = data[i];//exchange value for child and parent.
beg = i; } data[beg] = temp;//insert the original parent data } void heapSort(int data[], int length) { if(data==NULL || length<=0) return; int i=0; for(i=length/2-1; i>=0; --i) { adjustHeap(data, i, length-1); } for(i=length-1; i>0; --i) { data
[i] ^= data[0];
data[0] ^= data[i]; data[i] ^= data[0]; adjustHeap(data, 0, i-1); } } int main(void) { int i = 0; int data[] = {1,7, 4}; int length = sizeof(data)/sizeof(data[0]); printf("before sorting the data is :"); for(i=0; i<length; ++i) { printf("%d ", data[i]); } printf("\n"); printf("after sorting the data is :"); heapSort(data, length); for(i=0; i<length; ++i) { printf("%d ", data[i]); } printf("\n"); return 0; }

Python版本如下:

#!/usr/bin/python
def adjustHeap(dataList, beg, end):
    if len(dataList)==0 or beg >end:
        return
    temp = dataList[beg]
    i = 2*beg +1
    while i<=end:
        if i+1<=end and dataList[i]<dataList[i+1]:
            i += 1  # note that there no ++i or i++ in the python
        if(temp >= dataList[i]):
            break
        dataList[beg] = dataList[i]
        beg = i
        i = 2*beg +1
    dataList[beg] = temp

def heapSort(dataList):
    if len(dataList)==0:
        return
    for i in range(len(dataList)/2-1, -1, -1):
        adjustHeap(dataList, i, len(dataList)-1)

    for i in range(len(dataList)-1, 0, -1):
        dataList[0], dataList[i] = dataList[i], dataList[0]
        adjustHeap(dataList, 0, i-1)

def main():
    data = [4, 1, 3, 6, 8, 9, 0, 2, 5, 7]
    print "the original data is:"
    print data
    print "after sorting data is:"
    heapSort(data)
    print data


if __name__ == "__main__":
    main()