首页 > 代码库 > 【Sort】HeapSort
【Sort】HeapSort
堆排序,时间复杂度O(N log N),实际使用中慢于使用Sedgewick增量的增量排序。
大致思路:
1.先在数组中建堆,如果是增量排序,则需要建一个大堆
2.每循环一次,把最大的数,也就是nums[0],放入堆尾,同时把nums[0]下滤
1 void heapsort(int *nums,int n) 2 { 3 int i; 4 for(i=n/2;i>=0;i--) 5 percdown(nums,i,n); 6 for(i=n-1;i>0;i--) 7 { 8 nums[0]^=nums[i]; 9 nums[i]^=nums[0]; 10 nums[0]^=nums[i]; 11 percdown(nums,0,i); 12 } 13 } 14 void percdown(int *nums,int p,int n) 15 { 16 int tmp; 17 int child; 18 for(tmp=nums[p];2*p+1<n;p=child) 19 { 20 child=2*p+1; 21 if(2*p+2!=n&&nums[2*p+2]>nums[child]) 22 child++; 23 if(nums[child]>tmp) 24 nums[p]=nums[child]; 25 else 26 break; 27 } 28 nums[p]=tmp; 29 30 }
【Sort】HeapSort
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。