/*
插入排序交换来,交换去,每次次确定一个元素的位置
*/
void Quicksort(ElementType A[], int N) { Qsort(A, 0, N-1); } ElementType Median3(ElementType A[], int Left, int Right) { int Center = (Left + Right)/2; if (A[Left] > A[Center]) swap(&A[Left], &A[Center]); if (A[Left] > A[Right]) swap(&A[Left], &A[Right]); if (A[Center] > A[Right]) swap(&A[Center], &A[Right]); swap(&a[Center], &A[Right-1]); return a[Right-1];//Right-1位置上的元素是这次排序的确定元素 } #define Cutoff (3) void Qsort(Element A[], int Left, int Right) { int i,j; ElementType Pivot; if (Left+Cutoff <= Right) { Pivot = Median3(A, Left, Right); i=Left; j=Right-1; for (;;) { while (A[++i] < Pivot); while (A[--j] > Pivot); if (i<j) swap(&A[i], &A[j]); else break; } swap(&A[i], &A[Right-1]); Qsort(A, Left, i-1); Qsort(A, i+1, Right); } else { insertionsort(A+Left, Right-Left+1); } }