堆排序

    xiaoxiao2025-09-02  260

    直接上代码 #include #include #include #include #define MAXRANDOM 10000 //产生最大随机数 #define LINESHOWNUM 18 //每行显示的数目 void swap(int* pA, int *pB) { if(NULL == pA || NULL == pB) { return ; } int iTmp = *pA; *pA = *pB; *pB = iTmp; } void printArray(int* pArray, int num) { if(NULL != pArray) { int i = 0; for( ; i < num; ) { printf("%5d ", pArray[i++]); if(i%LINESHOWNUM == 0) { putchar('\n'); } } printf("\n"); } } void AdjustHeap(int* pArray, int nOff) { if(NULL == pArray || nOff <= 1) { return; } int nParent = nOff/2; while(nParent > 0) { if(pArray[nOff - 1] > pArray[nParent - 1]) { swap(pArray + nOff -1, pArray + nParent - 1); } nOff /= 2; nParent = nOff/2; } } void CreatHeap(int *pArray, int nLenth) { if(NULL == pArray || nLenth <= 1) { return; } int nLeafNode = nLenth / 2; while(nLeafNode < nLenth) { AdjustHeap(pArray, ++nLeafNode); } } void HeapSort(int *pArray, int nLenth) { if(NULL == pArray || nLenth < 1) { return; } CreatHeap(pArray, nLenth); int nTmp = nLenth; while(nTmp > 0) { swap(pArray, pArray + nTmp - 1); CreatHeap(pArray, --nTmp); } } int main(int argc, const char *argv[]) { if(argc < 2) { fprintf(stderr, "Usage: %s num", argv[0]); return -1; } int num = atoi(argv[1]); if(num < 1) { fprintf(stderr, "Num Must greater than 1"); return -1; } int* pArray = (int*)malloc(num*sizeof(int)); if(NULL == pArray) { fprintf(stderr," Creat array error!"); return -1; } printf("正在生成长度为%d的随机数组!\n", num); srand(time(0)); int i = 0; for( ; i < num; ++i) { pArray[i] = rand()%MAXRANDOM; } printf("排序前:\n"); //printArray(pArray, num); HeapSort(pArray, num); printf("排序后:\n"); printArray(pArray, num); free(pArray); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1302248.html
    最新回复(0)