00001 00007 #include <stdio.h> 00008 int partition (int *A, int p, int r) 00009 { 00010 int x = *(A+p); 00011 int i = p-1; 00012 int j = r+1; 00013 int temp; 00014 while (1) { 00015 while (*(A+(--j)) > x); 00016 while (*(A+(++i)) < x); 00017 if ( i<j ) { 00018 temp=*(A+i); 00019 *(A+i)=*(A+j); 00020 *(A+j)=temp; 00021 } 00022 else 00023 return j; 00024 } 00025 } 00026 00027 void quicksort (int *A, int p, int r) 00028 { 00029 int q; 00030 if (p < r) { 00031 q = partition(A, p, r); 00032 quicksort(A, p, q); 00033 quicksort(A, q+1, r); 00034 } 00035 }