最大堆排序(性能测试)
2016-10-09 23:28
190 查看
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 2000000//测试代码性能的时候用的百万级数组,可以自己调整大小
static int heapsize=SIZE;//具有文件作用域的无外部链接的静态变量,排序函数会用到这个变量,记录堆的大小
int build_max_heap(int *pt);
int max_heapify(int *pt,int i);
int max_heap_sort(int pt[]);
int main(void)
{ //生成、并打印数组
int arr[SIZE];
srand(time(0));//根据系统时间来生成种子
puts("Before Sorting");
for(int i=0;i<SIZE;i++)
{ arr[i]=rand()%SIZE;
printf("%7d",arr[i]);
if((i+1)%10==0)
putchar('\n');
}
//排序、记录时间
float time_start=clock();
max_heap_sort(arr);
float time_end=clock();
//打印排好序的数组
puts("After Sorting");
for(int i=0;i<SIZE;i++)
{
printf("%7d",arr[i]);
if((i+1)%10==0)
putchar('\n');
}
printf("Consume:%fs",(time_end-time_start)/CLOCKS_PER_SEC);
}
int max_heap_sort(int pt[])
{ build_max_heap(pt);
for(int i=SIZE-1;i>=1;i--)
{ int temp=pt[heapsize-1];
pt[i]=pt[0];
pt[0]=temp;
heapsize--;
max_heapify(pt,0);
}
}
int build_max_heap(int *pt)
{ for(int i=(SIZE-1)/2;i>=0;i--)
max_heapify(pt,i);
}
int max_heapify(int *pt,int i)
{ int largest;
int l,r;
int temp=pt[i];
l=2*i+1;
r=2*i+2;
if(l<heapsize&&pt[l]>pt[i])
largest=l;
else
largest=i;
if(r<heapsize &&pt[r]>pt[largest])
largest=r;
if(largest!=i)
{ pt[i]=pt[largest];
pt[largest]=temp;
max_heapify(pt,largest);
}
}
#include <stdlib.h>
#include <time.h>
#define SIZE 2000000//测试代码性能的时候用的百万级数组,可以自己调整大小
static int heapsize=SIZE;//具有文件作用域的无外部链接的静态变量,排序函数会用到这个变量,记录堆的大小
int build_max_heap(int *pt);
int max_heapify(int *pt,int i);
int max_heap_sort(int pt[]);
int main(void)
{ //生成、并打印数组
int arr[SIZE];
srand(time(0));//根据系统时间来生成种子
puts("Before Sorting");
for(int i=0;i<SIZE;i++)
{ arr[i]=rand()%SIZE;
printf("%7d",arr[i]);
if((i+1)%10==0)
putchar('\n');
}
//排序、记录时间
float time_start=clock();
max_heap_sort(arr);
float time_end=clock();
//打印排好序的数组
puts("After Sorting");
for(int i=0;i<SIZE;i++)
{
printf("%7d",arr[i]);
if((i+1)%10==0)
putchar('\n');
}
printf("Consume:%fs",(time_end-time_start)/CLOCKS_PER_SEC);
}
int max_heap_sort(int pt[])
{ build_max_heap(pt);
for(int i=SIZE-1;i>=1;i--)
{ int temp=pt[heapsize-1];
pt[i]=pt[0];
pt[0]=temp;
heapsize--;
max_heapify(pt,0);
}
}
int build_max_heap(int *pt)
{ for(int i=(SIZE-1)/2;i>=0;i--)
max_heapify(pt,i);
}
int max_heapify(int *pt,int i)
{ int largest;
int l,r;
int temp=pt[i];
l=2*i+1;
r=2*i+2;
if(l<heapsize&&pt[l]>pt[i])
largest=l;
else
largest=i;
if(r<heapsize &&pt[r]>pt[largest])
largest=r;
if(largest!=i)
{ pt[i]=pt[largest];
pt[largest]=temp;
max_heapify(pt,largest);
}
}
相关文章推荐
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- 常见排序的JAVA实现和性能测试
- 最大概率法分词及性能测试
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- java实现各种排序算法(包括冒泡排序,选择排序,插入排序,快速排序(简洁版))及性能测试
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- 用C#和策略模式实现各种排序方法及性能测试
- 直接插入排序,希尔排序,冒牌排序,选择排序基本性能测试
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- MySQL性能测试分析 mysql表最大记录数
- MySQL性能测试分析 mysql表最大记录数
- 数据结构 c语言设计队列 实现桶式排序和基数排序 测试性能
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- SQL Server 2000性能测试分析 sql 表最大记录数
- java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- MySQL性能测试分析 mysql表最大记录数