Why this quicksort code doesnot work... (c) -


  #include <stdio.h>     #include <stdlib.h>      void quick(int *a,int left,int right,int k);     void print(int *a);     void swap(int *a,int x,int y);      int indexpivot,n,tmp;       int main()     {        int i,a[50],k;         printf("\n\n\n   size??\t\t");        scanf("%d",&n);           for(i=0;i<n;i++){             printf("  %d. element...\t",i+1);             scanf("%d",&a[i]);     }         printf("\n   1 or 2   ");//another method 1 important now,not 2        scanf("%d",&k);         printf("\n   first appearance  ");       print(a);      quick(a,0,n-1,k);        printf("   \nmedium element: %d\n   ",a[(n)/2]);      print(a);      }    //always putting first pivot      void quick(int *a,int left,int right,int k){//k method,not used here         int pivot,i,j;     if(k==1){         indexpivot=left;         pivot=a[indexpivot];         }         /*else{             if(a[left]<a[right]){                 if(a[(right+left)/2]>a[right]){                      indexpivot=right;                 }                 else{                      indexpivot=(right+left)/2;                 }             }             else{                     if(a[(right+left)/2]>a[left]){                      indexpivot=left;                 }                 else{                indexpivot=(right+left)/2;                 }             }            }            printf("\n   pivot: %d",a[indexpivot]);*/      while(indexpivot!=(right+left)/2&&left<right){      j=right;     i=left+1;print(a);        while(i<j){             while(pivot<a[j]&&left<j){                 j=j-1;                print(a);             }             while(pivot>a[i]&&i<j){                     i=i+1;                    print(a);             }      if(i<j){             swap(a,i,j);        print(a);        i=i+1;        j=j-1;        print(a);     }         print(a);        }     //while(a[s]>pivot){i=i-1;}         swap(a,indexpivot,j);        indexpivot=j;//pivot goes place       print(a);          if(indexpivot>(right+left)/2){             quick(a,left,indexpivot-1,k);             print(a);           }          if(indexpivot<(right+left)/2){             quick(a,indexpivot+1,right,k);             print(a);           }       }       }          void print(int *a){        int i;        printf("\n   ");         for(i=0;i<n;i++){             printf("%d ",a[i]);             }     }          void swap(int *a,int x,int y){     int tmp;     tmp=a[x];     a[x]=a[y];     a[y]=tmp;     } 

i working on 5 hours still couldnot ive. goes infinitive loop.

i give {1,2,3,4,5 goes infinite loop.

i debugged, analysed cannot see it.

waiting someone's suggestion.

this not quicksort. trying different. difference is

  if(indexpivot>(right+left)/2){     quick(a,left,indexpivot-1,k);     print(a);   }  if(indexpivot<(right+left)/2){     quick(a,indexpivot+1,right,k);     print(a);   } 

that part.

the problem seems exist in line:

while(pivot<a[j]&&left<j) 

which should be:

while(pivot<a[j]&&i<j) 

Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

c# - Unity IoC Lifetime per HttpRequest for UserStore -

I am trying to solve the error message 'incompatible ranks 0 and 1 in assignment' in a fortran 95 program. -