int main() { //Stack <double, 5> kExpStack; Stack <double> kExpStack(5); cout << "Stack Size = " << kExpStack.GetStackSize() << endl; kExpStack.push(145.5f); kExpStack.push(183.25f); kExpStack.push(162.3f); int Count = kExpStack.Count(); for ( int i = 0 ; i < Count; ++i ) { cout << kExpStack.pop() << endl; } Stack <long> kStackMoney; cout << "Stack Size = " << kStackMoney.GetStackSize() << endl; kStackMoney.push(1000023); kStackMoney.push(1000234); kStackMoney.push(1000145); Count = kStackMoney.Count(); for ( int i = 0 ; i < Count; ++i) { cout << "money - " << kStackMoney.pop() << endl; } char GameID1[MAX_ID_LENGTH] = "Nice"; char GameID2[MAX_ID_LENGTH] = "Super"; Stack<char *> kStack2(64); kStack2.push(GameID1); kStack2.push(GameID2); Count = kStack2.Count(); for ( int i = 0 ; i < Count; ++i) { cout << "ID - " << kStack2.pop() << endl; } return 0; }
//------------------------------------------------------------------------------ //М-эталонная быстрая сортировка int MQuickSort(FILE *out, int m, Stack stack) { long count=stack.Count(), k=m, //число, определяющее значение "pos" pos, //позиция эталонного элнмента e[m], //массив эталонных элементов i, j; //счётчики //стек "stack" нельзя разбить на М+1 часть if (count<2*m) { //стек "stack" состоит из 1 элемента if (count==1) fprintf(out, "%i ", stack.Top()); else { //сортировка стека "stack" простой вставкой //результат сортировки: стек "stack1" Stack stack1, stack2; //вспомогательные стеки while (stack.Count()!=0) { if ((stack1.Count()==0) | (stack1.Top()>stack.Top())) { stack1.Push(stack.Top()); stack.Pop(); pop++; } else { //"перекидываем" элементы из "steck1" в "steck2", пока //вершинный элемент <stack.Top() while ((stack1.Top()<stack.Top()) & (stack1.Count()!=0)) { stack2.Push(stack1.Top()); stack1.Pop(); pop++; } //вставляем в "steck1" эдемент stack.Top() stack1.Push(stack.Top()); stack.Pop(); pop++; //"перекидываем" все элементы из "steck2" в "steck1" while (stack2.Count()!=0) { stack1.Push(stack2.Top()); stack2.Pop(); pop++; } } } //вывод отсортированного стека в текстовый файл while (stack1.Count()!=0) { fprintf(out, "%i ", stack1.Top()); stack1.Pop(); pop++; } } return 0; } Stack s[m+1], //массив стеков tmp; //вспомогательный стек ("stack" без эталонных элементов) //разбитие стека "steck" на стек "tmp" и эталонные элементы "e[i]" for (i=0;i<=m;i++) { pos=k*(count+1)/(m+1); //позиция очередного эталонного элемента while (stack.Count()!=pos) { tmp.Push(stack.Top()); stack.Pop(); pop++; } if (k!=0) e[k-1]=stack.Top(); stack.Pop(); pop++; k--; } //сортировка пузырьком эталонных элементов "e[i]" if (m!=1) for (i=0;i<m;i++) for (j=i+1;j<m;j++) if (e[i]>e[j]) { long temp=e[i]; e[i]=e[j]; e[j]=temp; } //разбиение стека "steck" без эталонных элементов (стек "tmp") на M+1 стек "s[i]" //в 1 стек попадут элементы <e[0], во 2 - <e[1], но >=a[0] и т.д. while (tmp.Count()!=0) { j=0; while (j<m) { if (tmp.Top()<e[j]) { s[j].Push(tmp.Top()); tmp.Pop(); pop++; if (tmp.Count()==0) break; j=0; } else j++; } if (tmp.Count()==0) break; //элемент попал в последний стек "s[m]" s[m].Push(tmp.Top()); tmp.Pop(); pop++; } for (i=0;i<=m;i++) { //рекурсивный вызов быстрой сортировки для каждого стека "s[i]" MQuickSort(out, m, s[i]); if (i!=m) { //вывод эталонного элемента в текстовый файл fprintf(out, "%i ", e[i]); } } }