top-500
来源:互联网 发布:为什么淘宝销量不增加 编辑:程序博客网 时间:2024/04/28 21:38
/* Find top-500 min integers among 1000000 random numbers by using quickselect algorithm, return running time */#include <stdio.h>#include <time.h>void GetNumFile (FILE* sp, long long int num){ int i; int randNum; // Open file if ( !(sp = fopen ("topK.txt", "w")) ) { printf("\aCould not open input file.\n"); exit (100); } // Generate random num and write to file srand ( (unsigned)time(NULL) ); for (i = 0; i < num; ++i) { randNum = rand() % 10000 + 1; fprintf(sp, "%d ", randNum); } fclose (sp);} void swap (int* a, int* b){ int t; t = *a; *a = *b; *b = t;}void maxHeapify (int A[], int i, int k){ int largest; int l = 2 * i + 1; int r = 2 * i + 2; if ( (l < k) && (A[l] > A[i]) ) largest = l; else largest = i; if ( (r < k) && (A[r] > A[largest]) ) largest = r; if (largest != i) { swap(&A[i], &A[largest]); maxHeapify(A, largest, k); }}void Print_topK (int heap[], int k){ int i; for (i = 0; i < k; ++i) { if (i % 20 == 0) putchar('\n'); printf("%2d ", heap[i]); } putchar('\n');}void Read_K_num (FILE* sp, int heap[], int k){ int i; // Open file if ( !(sp = fopen ("topK.txt", "r")) ) { printf("\aCould not open input file.\n"); exit (100); } // Read k number to array heap[] for (i = 0; i < k; ++i) fscanf(sp, "%d", &heap[i]); // Heapify the first k number in heap[] for (i = 0; i <= (int)(k / 2) - 1; ++i) maxHeapify(heap, i, k); fclose (sp);}void Heapify_topK (FILE* sp, int heap[], int k, int num){ int i; int next; // Open file if ( !(sp = fopen ("topK.txt", "r")) ) { printf("\aCould not open input file.\n"); exit (100); } for (i = 0; i < num; ++i) { if (i < k) fscanf(sp, "%d", &next); else { fscanf(sp, "%d", &next); if (next < heap[0]) { heap[0] = next; maxHeapify(heap, 0, k); } } } fclose (sp);}int main(){ long long int num = 1000000; int k = 300; int heap[k]; int i; FILE* sp; clock_t beg, end; beg = clock(); GetNumFile(sp, num); Read_K_num(sp, heap, k); Heapify_topK(sp, heap, k, num); end = clock(); printf("Running Time: %.2f\n", (double)(end - beg)); Print_topK(heap, k); return 0;}
0 0
- top-500
- top
- top
- Top
- Top
- top
- top
- top
- top
- top
- top
- top
- top
- TOP
- top
- top
- top
- TOP
- nyoj 130 相同的雪花
- HDU3892 Common Roots 多项式欧几里德求最大公共多项式
- 鹰的蜕变
- Java IO流(字节流)
- Subsets II
- top-500
- 让不难降为简单
- MATLAB中cftool使用
- nefu 642 记忆化搜索
- 后台cs代码创建Storyboard动画
- Java的ForEach
- windows phone 7 页面间跳转方法
- jquery.validate自定义验证--成功提示与择要提示
- ipconfig vs2010 C+++