编程语言
首页 > 编程语言> > C语言- 基础数据结构和算法 - 20 堆排序20220618

C语言- 基础数据结构和算法 - 20 堆排序20220618

作者:互联网

 C语言- 基础数据结构和算法 - 20 堆排序20220618.

听黑马程序员教程《基础数据结构和算法 (C版本)》,
 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1
 喜欢的朋友可以去看看,欢迎大家一起交流学习。

20 堆排序20220618.c

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <time.h>
  5 #include <sys/timeb.h>
  6 
  7 
  8 
  9 #define MAX 100
 10 
 11 // 取得当前系统时间 
 12 long getSystemTime(){        
 13     struct timeb tb;
 14     ftime(&tb);
 15     return tb.time*1000 + tb.millitm;
 16 }
 17 
 18 // 创建数组 
 19 int* CreateArray(){
 20     int i;
 21     int* arr = (int*)malloc(sizeof(int) * MAX);
 22     srand((unsigned int)time(NULL));
 23     for(i=0;i<MAX;i++){
 24         arr[i] = rand() % MAX;
 25     }
 26     
 27     return arr;
 28 }
 29 
 30 // 打印函数
 31 void PrintArray(int arr[],int lenght){
 32     
 33     int i;
 34     for(i=0;i<lenght;i++){
 35         printf("%-3d ",arr[i]);
 36     }
 37     printf("\n-------------------------------------------------\n");
 38 }
 39 
 40 // 交换函数 
 41 void MySwap(int arr[],int a,int b){
 42     int temp = arr[a];
 43     arr[a] = arr[b];
 44     arr[b] = temp;
 45 }
 46 // 堆排序
 47 // myArr:待调整的数组,index:待调整的节点的下标,len:数组的长度。 
 48 void HeapAdjust(int arr[],int index,int len){
 49     
 50     // 先保存当前节点的下标。 
 51     int max = index;
 52     // 保存左右孩子的组标下标。 
 53     int lchild =  index * 2 + 1;
 54     int rchild =  index * 2 + 2; 
 55     
 56     if(lchild < len && arr[lchild] > arr[max]){
 57         max = lchild;
 58     }
 59     if(rchild < len && arr[rchild] > arr[max]){
 60         max = rchild;
 61     }
 62     if(max!=index){
 63         // 交换两个节点
 64         MySwap(arr,max,index); 
 65         HeapAdjust(arr,max,len);
 66     }
 67 }
 68 // 堆排序
 69 void HeapSort(int myArr[],int len){
 70     
 71     // 初始化堆 
 72     int i;
 73     for(i = len/2 -1;i>=0;i--){
 74         HeapAdjust(myArr,i,len);
 75     }
 76     
 77     // 交换堆顶元素和最后一个元素
 78     int j;
 79     for(j=len-1;j>=0;j--) {
 80         MySwap(myArr,0,j);
 81         HeapAdjust(myArr,0,j);
 82     }
 83     
 84 }
 85 
 86 int main(){
 87     printf("好好学习,天天向上~!!\t\t\t 19 归并排序20220618\n\n");
 88     
 89     // 创建数组
 90     int* myArr = CreateArray(); 
 91     
 92     printf("原数组:");
 93     PrintArray(myArr,MAX);
 94     
 95     printf("排序后:");
 96     HeapSort(myArr,MAX); 
 97     PrintArray(myArr,MAX);
 98  
 99     printf("\n");
100     system("pause");
101     return 0;
102 }

 

标签:arr,20,20220618,int,max,堆排序,len,include,myArr
来源: https://www.cnblogs.com/stou/p/16389054.html