Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- void swap (int *a, int *b){
- int temp = *a;
- *a = *b;
- *b = temp;
- }
- void change(int *arr, unsigned long int p, unsigned long int n){
- unsigned long int max;
- while ( (2*p + 1) < n ){
- if ((2*p + 1 == n-1) || (arr[2*p + 1] > arr[2*p + 2]))
- max = 2*p + 1;
- else max = 2*p + 2;
- if (arr[p] < arr[max]){
- swap(&arr[p],&arr[max]);
- p = max;
- }
- else break;
- }
- }
- void heapsort(int *arr, unsigned long int n){
- long int i;
- for ( i = n/2 - 1; i > 0; --i){
- change(arr, (unsigned long int)i, (unsigned long int)n);
- }
- for ( i = (long int)n - 1; i > 0; --i){
- swap(&arr[0],&arr[i]);
- change(arr, 0, (unsigned long int)i);
- }
- }
- int main(void) {
- long int n = 0;
- if (scanf("%1d\n", &n) == EOF) {
- printf("bad input");
- return 1;
- }
- int *arr = malloc((unsigned long int) n * sizeof(int));
- if (arr == NULL) {
- printf("memory error");
- return 1;
- }
- unsigned long int i = 0;
- while (i < (unsigned long int) n) {
- if (scanf("%d", &arr[i]) == EOF) {
- printf("bad input");
- return 1;
- }
- ++i;
- }
- heapsort(arr, (unsigned long int)n);
- for (i = 0; i < (unsigned long int)n; ++i){
- printf("%d", a[i])
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement