/* A simple version of quicksort; taken from Kernighan and Ritchie, page 87 */ static PetscErrorCode PetscSortReal_Private(PetscReal *v,PetscInt right) { PetscInt i,last; PetscReal vl,tmp; PetscFunctionBegin; if (right <= 1) { if (right == 1) { if (v[0] > v[1]) SWAP(v[0],v[1],tmp); } PetscFunctionReturn(0); } SWAP(v[0],v[right/2],tmp); vl = v[0]; last = 0; for (i=1; i<=right; i++) { if (v[i] < vl) {last++; SWAP(v[last],v[i],tmp);} } SWAP(v[0],v[last],tmp); PetscSortReal_Private(v,last-1); PetscSortReal_Private(v+last+1,right-(last+1)); PetscFunctionReturn(0); }
/*@ PetscSortReal - Sorts an array of doubles in place in increasing order. Not Collective Input Parameters: + n - number of values - v - array of doubles Level: intermediate Concepts: sorting^doubles .seealso: PetscSortInt(), PetscSortRealWithPermutation() @*/ PetscErrorCode PetscSortReal(PetscInt n,PetscReal v[]) { PetscInt j,k; PetscReal tmp,vk; PetscFunctionBegin; if (n<8) { for (k=0; k<n; k++) { vk = v[k]; for (j=k+1; j<n; j++) { if (vk > v[j]) { SWAP(v[k],v[j],tmp); vk = v[k]; } } } } else PetscSortReal_Private(v,n-1); PetscFunctionReturn(0); }