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 }