#include <iostream> using namespace std; #define Cutoff 3 void Swap(int &a, int &b) { int Tmp; Tmp = a; a = b; b = Tmp; } void InsertionSort(int A[], int N) { int j, P; int Tmp; for(P = 1; P < N; P++) { Tmp = A[P]; for( j = P; j > 0 && A[j - 1] > Tmp; j--) A[j] = A[j - 1]; A[j] = Tmp; } } int Median3(int 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]; } void Qsort(int A[], int Left, int Right) { int i, j; int 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); } void main() { int list[10] = {12, 13, 11, 23, 14, 54, 55, 43, 32, 22}; int Right = 9,Left = 0; int i; printf("/n "); Qsort(list, Left, Right); for(i=0;i<10;i++) printf("%5d",list[i]); printf("/n"); }