Code #include <iostream> #include <conio.h>
using namespace std;
void puz_metod(int mas[], int n) { int temp; for (int i=0; i<n; i++) { for (int j=n-1; j>i; j--) { if (mas[i]>mas[j]) { temp=mas[i]; mas[i]=mas[j]; mas[j]=temp; } } } wcout << L"Отсортирован методом пузырька: "; for (int i=0; i<n; i++) cout<<mas[i]<<' '; cout<<endl; }
void sort_stack (int* a, int n) { int i=0, j=n; int temp, p; p=a[n>>1]; do { while (a[i]<p) i++; while (a[j]>p) j--; if (i<=j) { temp=a[i]; a[i]=a[j]; a[j]=temp; i++; j--; } } while(i<=j); if (j>0) sort_stack(a, j); if (n>i) sort_stack(a+i, n-i); }
void chet_nechet (int mas[], int n) { int temp; for (int i=0; i<n; i++) { for (int j=n-1; j>i; j--) { if (mas[i]>mas[j]) { temp=mas[i]; mas[i]=mas[j]; mas[j]=temp; } } }
wcout << L"Отсортированы чётные: "; for (int i=0; i<n; i++) if (mas[i]%2==0){cout<<mas[i]<<' ';} cout << endl; for (int i=0; i<n; i++) { for (int j=n-1; j>i; j--) { if (mas[i]<mas[j]) { temp=mas[i]; mas[i]=mas[j]; mas[j]=temp; } } }
wcout << L"Отсортированы не чётные: "; for (int i=0; i<n; i++) if (mas[i]%2!=0){cout<<mas[i]<<' ';} cout << endl; }
void vozrast_inter(int mas[]) { int fst, sec, temp; wcout << L"Введите индекс начала "; cin >> fst; fst--; wcout << L"Введите индекс конца "; cin >> sec; sec--; for(int i=fst; i<sec; i++) { for (int j=sec; j>i; j--) { if (mas[i]>mas[j]) { temp=mas[i]; mas[i]=mas[j]; mas[j]=temp; } } } wcout<<L"Отсортированный массив с "<<fst+1<<L" до "<<sec+1<<L" индекса: "; for (int i=fst; i<=sec; i++) cout << mas[i] << ' '; cout << endl; }
void ubiv_inter(int mas[]) { int fst, sec, temp; wcout << L"Введите индекс начала: "; cin>>fst; fst--; wcout << L"Введите индекс конца: "; cin >> sec; sec--; for(int i=fst; i<sec; i++) { for (int j=sec; j>i; j--) { if (mas[i]<mas[j]) { temp=mas[i]; mas[i]=mas[j]; mas[j]=temp; } } } wcout << L"Отсортированный массив с " << fst+1 << L" до " << sec+1 << L" индекса: "; for (int i=fst; i<=sec; i++) cout << mas[i] << ' '; cout << endl; }
void main(void) { wcout.imbue (locale (".866")); int mas []={2,5,-8,1,-4,6,3,-5,-9,13,0,4,9}; int imin, imax; int n=sizeof(mas)/sizeof(int); cout << "n= " << n << endl; int i; imin=i=0; imax=i=0; wcout<< L"Заданный массив: "; for(i=0; i<n; i++) cout << mas[i] << ' '; cout << endl; //Метод мини-макса for(i=0; i<n-1; i++) { imin=i; for(int j=i+1; j<n; j++) if (mas[j]<mas[imin]) imin=j; int t=mas[i]; mas[i]=mas[imin]; mas[imin]=t; } wcout << L"Отсортированный массив: "; for (i=0; i<n; i++) cout<<mas[i]<<' '; cout << endl;
puz_metod(mas, n); sort_stack(mas, n-1); chet_nechet(mas, n); vozrast_inter(mas); ubiv_inter(mas);
system ("pause"); } Функция puz_metod - сортировка методом "пузырька" массива целых чисел, размерностью n Функция chet_nechet - сортировка по чётным и отдельно по нечётным целым. Функция vozrast_inter - сортировка по возрастанию с указанием начального индекса и конечного. Функция ubiv_inter - то же, что и предыдущая, только по убыванию. (немного не корректно работает, надо доделать) Функцию sortstack рассмотрим немного подробней. Функция рекурсивная. Во-первых для работы с массивом, мы передаём в функцию указатель на первый элемент массива. n - количество элементов в массиве. Переменные i и j инициализируем как 0 и n соответственно, они будут задавать границы массива. p=a[n>>1]; n>>1 - сдвиг на один бит вправо. Такой вот способ выбора элемента. Затем идёт цикл манипуляций с элементами, после него функция вызывает саму себя с определёнными аргументами. В функции main инициализируется массив и выводится на экран. Затем сортируется методом "мини-макса" и выводится на экран. Далее, выполняются функции, работающие с массивом. В методичке указано, что пример рассматривает реализации различных алгоритмов средствами языка Си++, но это не совсем так. На Си++ мы только выводим информацию на экран, остальное это Си. Вот такая смесь. Чтобы пример был полностью на Си++, надо это задание выполнить с использованием класса и реализовать соответствующие методы. Ну, в общем, всё.
|