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