堆排序
1 /* 堆和堆排序 */ 2 3 // 堆排序 查找最大值 最小值速度最快 4 // 数据结构里面的堆 主要是取出极值 5 6 #include<stdio.h> 7 #include<stdlib.h> 8 9 void show(int *p,int n) 10 { 11 12 for(int i=0;i<n;i++) 13 { 14 printf("%4d",p[i]); 15 } 16 printf("\n"); 17 } 18 19 void findmax(int *arr,int size)// 取最大值 20 { 21 for (int j=size-1;j>0;j--)// 堆排序 从尾部循环到头部,自下而上登顶 22 { 23 int parent = j / 2;// 父节点下标 24 int child = j;// 记录当前下标 25 if (j<size-1 && arr[j]<arr[j+1])// 先取出左右最大值 26 { 27 child++; 28 } 29 30 if(arr[child]>arr[parent])// 最大值登顶 31 { 32 int temp = arr[child]; 33 arr[child] = arr[parent]; 34 arr[parent] = temp; 35 } 36 } 37 38 } 39 40 41 void heapsort(int *arr,int size)// 堆排序 地址是固定的 需要额外交换数据 42 { 43 for (int j=size;j>0;j--) 44 { 45 findmax(arr,j); 46 int temp = arr[0]; 47 arr[0] = arr[j-1]; 48 arr[j-1] = temp; 49 } 50 } 51 52 53 54 void heapsortbyaddr(int *arr,int size)// 地址 长度都在变化 55 { 56 for (int i=0;i<10;i++) 57 { 58 findmax(arr+i,size-i); 59 show(a,10); 60 } 61 } 62 63 64 void main() 65 { 66 int a[10]={10,13,20,12,30,14,50,19,60,29}; 67 68 69 show(a,10); 70 71 findmax(a,10); 72 73 show(a,10); 74 75 heapsort(a,10); 76 77 show(a,10); 78 79 system("pause"); 80 }
长风破浪会有时,直挂云帆济沧海
posted on 2015-06-24 12:55 Dragon-wuxl 阅读(227) 评论(0) 收藏 举报
1
浙公网安备 33010602011771号