#include class Item { public: int Value; void *Process; }; extern int Test,LastTest,NewList,Finish; void QS(void); Item ItemList[30] = { {22,&Test}, {30,&Test}, {17,&Test}, {9,&Test}, {4,&Test}, {99,&Test}, {200,&Test}, {23,&Test}, {34,&Test}, {16,&Test}, {97,&Test}, {401,&Test}, {27,&Test}, {51,&Test}, {60,&Test}, {37,&Test}, {19,&Test}, {13,&Test}, {1,&Test}, {94,&Test}, {73,&Test}, {81,&Test}, {77,&Test}, {24,&Test}, {31,&Test}, {67,&Test}, {42,&Test}, {50,&Test}, {69,&Test}, {11,&Test}, }; class ListItem { public: Item * First; Item * Last; void * Process; }; ListItem ListArray[50]; ListItem * List = ListArray; void QS() { int ITemp; static void * Dummy[] = {&&Test,&&LastTest,&&Finish,&&NewList}; Item * First, * Last, * Split, * Pivot, *This; List = ListArray; List->First = 0; List->Last = 0; List->Process = &&Finish; List++; First = &(ItemList[0]); Last = &(ItemList[29]); Split = First; Pivot = First; This = First+1; Last->Process = &&LastTest; goto * This->Process; Test: asm("Test:\n\t.global\tTest\n"); if (This->Value < Pivot->Value) { Split++; ITemp = This->Value; This->Value = Split->Value; Split->Value = ITemp; } This++; goto * This->Process; LastTest: asm("LastTest:\n\t.global\tLastTest\n"); if (This->Value < Pivot->Value) { Split++; ITemp = This->Value; This->Value = Split->Value; Split->Value = ITemp; } ITemp = Pivot->Value; Pivot->Value = Split->Value; Split->Value = ITemp; This->Process = &&Test; List->First = First; List->Last = Split-1; List->Process = &&NewList; List++; First = Split+1; // goto NewList; NewList: asm("NewList:\n\t.global\tNewList\n"); if (Last <= First) { List--; First = List->First; Last = List->Last; goto * List->Process; } Split = First; Pivot = First; This = First+1; Last->Process = &&LastTest; goto * This->Process; Finish: asm("Finish:\n\t.global\tFinish\n"); return; } main() { QS(); for (long i=0 ; i<30 ; i++) { fprintf(stdout,"%d\n",ItemList[i].Value); } }