堆排序
成绩 | 10 | 开启时间 | 2015年12月8日 星期二 10:00 |
折扣 | 0.8 | 折扣时间 | 2015年12月24日 星期四 23:55 |
允许迟交 | 否 | 关闭时间 | 2015年12月31日 星期四 23:55 |
实验要求:用堆排序算法按关键字递减的顺序排序。
程序输入:待排序记录数(整数)和待排序记录(整数序列);
程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define xunhuan Heapsort();\ 5 for(i=1;i<=number;i++) \ 6 printf("%d ",a[i]); \ 7 printf("\n"); \ 8 a[1]=a[number]; \ 9 number--; 10 11 int a[100]; 12 int number; 13 14 15 16 17 void adjust(int length, int t) 18 { 19 int i, j, up; 20 i = length; 21 j = 2 * i; 22 up = a[i]; 23 while (j <= t) 24 { 25 if (j<t&&a[j]<a[j + 1]) 26 j++; 27 if (up<a[j]) 28 { 29 a[i] = a[j]; 30 i = j; 31 j = 2 * i; 32 } 33 else 34 { 35 j = t + 1; 36 } 37 } 38 a[i] = up; 39 } 40 void Heapsort() 41 { 42 int length; 43 for (length = number / 2; length >= 1; length--) 44 adjust(length, number); 45 46 } 47 int main() 48 { 49 int i, j, k, t; 50 for (i = 0; i<100; i++) 51 a[i] = 0; 52 scanf("%d", &number); 53 for (i = 1; i <= number; i++) 54 { 55 scanf("%d", &a[i]); 56 } 57 xunhuan; 58 xunhuan; 59 xunhuan; 60 61 }