Small Triangles, Large Triangles

  • + 56 comments
    void sort_by_area(triangle *tr, int n) {
    // Sort an array a of the length n
        int *p=malloc(n*sizeof(int)); 
    //create array of size n to store "volumes"
        for(int i=0;i<n;i++)
        {
    	float a=(tr[i].a+tr[i].b+tr[i].c)/2.0;
    //use 2.0 compulsary int/int gives int, int/float gives float
           p[i]=(a*(a-tr[i].a)*(a-tr[i].b)*(a-tr[i].c));
    //formula without sqrt as areas are different guarenteed 
    //because sqrt dosent work well with float values
        }
    //bubble sort
        for(int i=0;i<n;i++)    
        {
            for(int j=0;j<n-i-1;j++)
            {
                if(p[j]>p[j+1])     
                {
                    int temp=p[j];
                    p[j]=p[j+1];
                    p[j+1]=temp;
    //swapping array of areas in ascending
    //and simuntaneously the structure contents
                    temp=tr[j].a;
                    tr[j].a=tr[j+1].a;
                    tr[j+1].a=temp;
                    temp=tr[j].b;
                    tr[j].b=tr[j+1].b;
                    tr[j+1].b=temp;
                    temp=tr[j].c;
                    tr[j].c=tr[j+1].c;
                    tr[j+1].c=temp;
                }
            }
        }
    }
    

    Simple straight logic

    array p is declared dynamically also can use //int p[1000];

    Don't manipulate anything else