//
// Created by 富一鹏 on 16/1/30.
//
#include "main.h"
#include <stdio.h>
void exchange(int* a,int* b){
int p=0;
p=*a;
*a=*b;
*b=p;
}
void adjustHeap(int *number,int longs,int i){
int left=2*i;
int right=2*i+1;
int max=i;
if(right>longs){
return;
}
if(number[left]>number[max]){
max=left;
}
if(number[right]>number[max]){
max=right;
}
if(max!=i) {
exchange(&number[max],&number[i]);
adjustHeap(number, longs, max);
}
}
void buildHeap(int *number,int longs) {
int i = longs / 2;
for (; i > 0; i--) {
adjustHeap(number, longs, i);
}
}
int main()
{
char in[100];
int count=0;
int num=0;
int number[100]={0};
scanf("%s",in);
for (int i = 0; i < sizeof(in) / sizeof(in[0]); ++i) {
if(in[i]!='5'){
num=in[i]-48+num*10;
}else{
number[count]=num;
num=0;
count++;
}
}
buildHeap(number,count);
for(int i=count;i>0;i--) {
exchange(&number[1], &number[i]);
adjustHeap(number,i-1,1);
}
for (int i = 1; i <= count; i++) {
printf("%d ",number[i]);
}
}
算法-堆排序-实现代码
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 选择排序 对于任何输入,时间为O(n*n); 冒泡排序 最优(对于升序的数组,因为加入了一个跳出判断):O(n),...
- 堆排序 (二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的一个元素。除了最底层外...