arrayscheapsort

Heap sort in 1d array doesn't work properly


I'm trying to heap sort 1d array by growth, but my code doesn't work properly. The problem is too many arguments in function call:

too many arguments to function call, expected 2, have 3.

My code is:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <stdbool.h>
int k = 0, t = 0; // k - value of sort, t - value of swaps
int n= 1000;
void heapify(int a[1000], int i) {
  // Find largest among root, left child and right child
    int largest = i;
    int left = 2 * i + 1;
    int right = 2 * i + 2;
    k++;
    if (left < n && a[left] > a[largest])
    {
        t++;
        largest = left;
    }
    if (right < n && a[right] > a[largest])
    {
        t++;
        largest = right;
    }
    // Swap and continue heapifying if root is not largest
    if (largest != i) 
    {
        t++;
        int temp = a[i];
        a[i] = a[largest];
        a[largest] = temp;
        heapify(a, n, largest);
    }
}

int main () {
    int i, j;
    double a[1000];
    int largest;
    srand (time (NULL));
    for ( i = 0; i < 1000; i++)
    {
        a[i] = rand() % 1000;
    }
    printf ("Array: \n");
    for ( i = 0; i < 1000; i++)
    {
        printf ("%4.0f", a[i]);
    }

    for ( i = 1000 / 2 - 1; i >= 0; i--)
    {
        heapify(a, n, i);
    }
    for ( i = 999; i >= 0; i--)
    {
        swap (a[0], a[i]);
        t++;
        heapify (a, i , 0);
    }
    
    printf ("\n");
    printf ("Sorted array: \n");
    for ( i = 0; i < 1000; i++)
    {
        printf ("%4.0f", a[i]);
    }
    printf ("\n");
    printf ("k = %d", k);
    printf ("\nt = %d", t);
    return 0;
}

I need 3 arguments, but I do not know how to make the code work properly. In code there are 1000 elements in array, but I tried with various values, but it didn't work either.

My goal is to receive a sorted array by growth like this: (example, used bubble sort to display it)

Array: 
 124 151 417 511 448 792 137 435 829 817 439 656 694 776  35 112 854 890 683 953 130 485 515 518  51 384 795 535 515 771  35 662 954 190 806 630 154 737 210 905 245 703 400 211 221 700 788 875 416  39 791  81 358 464 183 247 870  76  43 175   8 521 718 518 122 862 177 542  47 109 619 990 779 755 826 796 705 179 788 339  53 852 948 919 178 806 663 248 572 267 401 922 106 357 163 149 994 494 421  89 878 373 391 255 132 326 911 874 291 307 494  97 340 814 340 574 531 434  52 665 218 699 968 164 185 541 170  51 100 571 961 177 796 966 815 710 956 632  35 674 390 319 361 116 465 512 980 244 943 891 485 194 181 505 457 154  15 307 113 185 241  15 905 715 408 199 720  27 929 577 502 439  62 823 199 980 581 452 840 545 301  18 812 244 569 938 250 222 780 873 461 172 682 218 661 468 646 465  22 840 782 186 135 321 817 843 259 264 232 435 975 864 839 672 632 494 439 142 794 483  79 676 973 377 737 850 428 339 174 974 325 705 454 508 582   2 755 227 508  32 728  87 877 357  52 995  18 264 631 824 207 641  32 579 522 303 412 870 333 547 874 833 933 267 279 736 978 791 315  34 893 320 312 486 356 377 754   5 129 120 245 776 226  12 920 639 506 453 915 304 418 251   8 903 601 422 437 340 278 797 973 530 687  35 326 780  14 938  34 579 945 884 107 597  93 279 564 957 163 725 591 376 342 702 576 896 957 686 966 180 720 203 241  46 665 715 480 565 766 169 310 503   8 349 237 329 560 435 299 994  79 949   6 830 731 859 826 237 616 693 624 784 991 853 382 258 568 275 357 304 187 171 950 756 751 723  35  96 319 618 833 450 262 398 252 721 845 159 320 763 327 575 794 382 174  68 921 954 143 267 654 186 816 373 256 244 998 839 853 886 405 780 948 786 806 165 342 878 154 158 816 227 684 894 810  19 572 131 942 645 591 745 764 611 550 816 156 770 733  26 548 300 728  13 994 123 623 569  51 127 353 705 283 130 389 751 662 505 745 930 255  71 341 607 102 388 846 403 122 782 853 947 385 499 411 617 928 195 623 538 289 455 243 827 358  36 315 588 215 253 967 370 333 188 755 969 591  15  16 349 623 309 869 470 726 499 583 907 636 612 211 692 595 487 689 330  51 296 190 587 955 492 800 929 676 651 769 909 389 718 265  20 629 226 478 915  52 350 502 665 139 117 537 684 390 268 343  15 920 525 620 828 459 655 134  20 200 539 674 435 168 674 169 718 816 360  80 931 269 108 736 300 996 828 384 542 327 249 544 832 829 667 456 480 160 950 456 427 808  55 942 896 171 220 262  21 543 737 929 938  16 133 246 238 463 213 254 543 471 385 905 613 277 413  90 491  33  98 179 363  50 931 126 512 751 934 446 940 406 549 867 315 275 538 467 144 159 509 216 556 999 260  49 470  68 452 352 648 686 593 716 948  95 450 168 756 736 871 997 979 543 708 837 554 646 707 963 271 422 701  32 120 826 686 187 711 917 943 336 856 287 478 949 516 122 569 136 828 264 820 505 872 816 755 384 697 335 586 860 428 572 979 539 979 564 323 181 983  65  17 685 212 453 431 543 782 624 199 440 326 985 949 896 887 859 521 509  76 145 932 268 674 264 177  66 940 151 798 225 454 396 648 112 381 475 279 191 442 570 207 464 845 213  69 665 529 100 753 732 674 679  53 662  75 718 733  91 520 878 668 913 772 729 572 978 843 701  76 523 291   2  33 522 297 834 347 222 476 787 816  11 842 327 363 810 131 950 601 456 677 475 857 315 674 616 556 116 214 845 684 852 830 879 933 232 870 350 688 659 190 598 403  11 538 124 933 963 122 554 782 758  37 877 839 772  10 261 528 274 595 639 108 579 950 384 994 320 208 724 179 257 978 446 459 832 896 316 626 534 186 931 735 920 116 715 900 575 429 322 266 955 956 376 735 779 744  62 810  90 448 234 794 558 937 741 824 954 184  53 517 387 257 517 534 638 527 243 307 651 619 295 837 366 338 310 185  34 110 521 487 239 713  18 193 687 434 674  27 265 602 599 170 401   5  60 978 388 706 552 918  37 302 358 364 835 721  80 446 894  96 363 141 960  73 760  56 165 189 931 524 344 233 166 328 319 228 139 326 792 168 305 964 455 407 832 651 646 755 359 777 627 118 635 418 448 824  56 524 421 459 349 933 292 690 139 316 353 508   1  14 323 906 608 967  12 597 389  98 535 224
Sorted array: 
   1   2   2   5   5   6   8   8   8  10  11  11  12  12  13  14  14  15  15  15  15  16  16  17  18  18  18  19  20  20  21  22  26  27  27  32  32  32  33  33  34  34  34  35  35  35  35  35  36  37  37  39  43  46  47  49  50  51  51  51  51  52  52  52  53  53  53  55  56  56  60  62  62  65  66  68  68  69  71  73  75  76  76  76  79  79  80  80  81  87  89  90  90  91  93  95  96  96  97  98  98 100 100 102 106 107 108 108 109 110 112 112 113 116 116 116 117 118 120 120 122 122 122 122 123 124 124 126 127 129 130 130 131 131 132 133 134 135 136 137 139 139 139 141 142 143 144 145 149 151 151 154 154 154 156 158 159 159 160 163 163 164 165 165 166 168 168 168 169 169 170 170 171 171 172 174 174 175 177 177 177 178 179 179 179 180 181 181 183 184 185 185 185 186 186 186 187 187 188 189 190 190 190 191 193 194 195 199 199 199 200 203 207 207 208 210 211 211 212 213 213 214 215 216 218 218 220 221 222 222 224 225 226 226 227 227 228 232 232 233 234 237 237 238 239 241 241 243 243 244 244 244 245 245 246 247 248 249 250 251 252 253 254 255 255 256 257 257 258 259 260 261 262 262 264 264 264 264 265 265 266 267 267 267 268 268 269 271 274 275 275 277 278 279 279 279 283 287 289 291 291 292 295 296 297 299 300 300 301 302 303 304 304 305 307 307 307 309 310 310 312 315 315 315 315 316 316 319 319 319 320 320 320 321 322 323 323 325 326 326 326 326 327 327 327 328 329 330 333 333 335 336 338 339 339 340 340 340 341 342 342 343 344 347 349 349 349 350 350 352 353 353 356 357 357 357 358 358 358 359 360 361 363 363 363 364 366 370 373 373 376 376 377 377 381 382 382 384 384 384 384 385 385 387 388 388 389 389 389 390 390 391 396 398 400 401 401 403 403 405 406 407 408 411 412 413 416 417 418 418 421 421 422 422 427 428 428 429 431 434 434 435 435 435 435 437 439 439 439 440 442 446 446 446 448 448 448 450 450 452 452 453 453 454 454 455 455 456 456 456 457 459 459 459 461 463 464 464 465 465 467 468 470 470 471 475 475 476 478 478 480 480 483 485 485 486 487 487 491 492 494 494 494 499 499 502 502 503 505 505 505 506 508 508 508 509 509 511 512 512 515 515 516 517 517 518 518 520 521 521 521 522 522 523 524 524 525 527 528 529 530 531 534 534 535 535 537 538 538 538 539 539 541 542 542 543 543 543 543 544 545 547 548 549 550 552 554 554 556 556 558 560 564 564 565 568 569 569 569 570 571 572 572 572 572 574 575 575 576 577 579 579 579 581 582 583 586 587 588 591 591 591 593 595 595 597 597 598 599 601 601 602 607 608 611 612 613 616 616 617 618 619 619 620 623 623 623 624 624 626 627 629 630 631 632 632 635 636 638 639 639 641 645 646 646 646 648 648 651 651 651 654 655 656 659 661 662 662 662 663 665 665 665 665 667 668 672 674 674 674 674 674 674 674 676 676 677 679 682 683 684 684 684 685 686 686 686 687 687 688 689 690 692 693 694 697 699 700 701 701 702 703 705 705 705 706 707 708 710 711 713 715 715 715 716 718 718 718 718 720 720 721 721 723 724 725 726 728 728 729 731 732 733 733 735 735 736 736 736 737 737 737 741 744 745 745 751 751 751 753 754 755 755 755 755 755 756 756 758 760 763 764 766 769 770 771 772 772 776 776 777 779 779 780 780 780 782 782 782 782 784 786 787 788 788 791 791 792 792 794 794 794 795 796 796 797 798 800 806 806 806 808 810 810 810 812 814 815 816 816 816 816 816 816 817 817 820 823 824 824 824 826 826 826 827 828 828 828 829 829 830 830 832 832 832 833 833 834 835 837 837 839 839 839 840 840 842 843 843 845 845 845 846 850 852 852 853 853 853 854 856 857 859 859 860 862 864 867 869 870 870 870 871 872 873 874 874 875 877 877 878 878 878 879 884 886 887 890 891 893 894 894 896 896 896 896 900 903 905 905 905 906 907 909 911 913 915 915 917 918 919 920 920 920 921 922 928 929 929 929 930 931 931 931 931 932 933 933 933 933 934 937 938 938 938 940 940 942 942 943 943 945 947 948 948 948 949 949 949 950 950 950 950 953 954 954 954 955 955 956 956 957 957 960 961 963 963 964 966 966 967 967 968 969 973 973 974 975 978 978 978 978 979 979 979 980 980 983 985 990 991 994 994 994 994 995 996 997 998 999
k = 988011
t = 248617

I would highly appreciate your help!


Solution

  • If you want to use recursion and pass largest as an argument, just add one more argument to the declaration of the heapify function:

    void heapify(int a[1000], int i, int largest) {...}
    

    And in the body of the function, do whatever you want with largest.