| gilardino |
Дата 11.1.2011, 14:51 (ссылка)
  |   (нет голосов)
Загрузка ...
|
|
|
Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.1.2011
Репутация: нет Всего: нет
|
| Код | #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <cstdlib> #include <iostream> #include <cstdlib> using namespace std;
int *Create(int n) {//Создание массива if (n <= 99999 && n > 1) { int *arr = new int [n]; for (int i = 0; i < n; i++)//Заполнение массива arr[i] = i; int k; for (int i = 0; i < n; i++)//Перемешивание элементов { k = rand() % n; int z = arr[i]; arr[i] = arr[k]; arr[k] = z; } return arr; } else return NULL; }
void Show(int *arr, int n) {//Вывод массива на экран cout << endl; for (int i = 0; i < n; i++) cout << arr[i] << " "; cout << endl; }
void Copy(int *arr1, int *arr2, int n) {//Копирование массива из arr1 в arr2 for (int i = 0; i < n; i++) arr2[i] = arr1[i]; }
void PocketSortArray(int *arr, int n) {//Сортировка с дополнительным массивом int moves = 0; int *sort = new int [n]; for (int i = 0; i < n; i++, moves++) sort[arr[i]] = arr[i]; Show(sort, n); cout << endl << "Сравнений = 0. Пересылок = " << moves << endl; delete[] sort; }
void PocketSort(int *arr, int n) {//Сортировка без дополнительного массива int moves=0, srav=0; for (int i = 0; i < n; i++) while(++srav && arr[i] != i) { int tmp = arr[i]; arr[i] = arr[tmp]; arr[tmp] = tmp; moves++; } Show(arr ,n); cout << endl << "Сравнений = " << srav << " Пересылок = " << moves << endl; }
int _tmain(int argc, _TCHAR* argv[]) {//Точка входа в программу srand(1); setlocale(LC_ALL, "Russian"); int *mas, *sortMas; int n = -1; char action; do { cout << endl << "1. Создать массив;" << endl << "2. Показать исходный массив;" << endl << "3. Карманная сортировка с дополнительным массивом;" << endl << "4. Карманная сортировка без дополнительного массива;" << endl << "0. Выход." << endl; action = getche(); //Ввод символа switch(action)//Выбор действия { case '1': if (n > 0) { delete[] mas;//Освобождение памяти delete[] sortMas; } cout << endl << "Введите размер массива = "; cin >> n; mas = Create(n); //Создание массива if (mas != NULL) { sortMas = new int [n];//Выделение памяти cout << endl << "Массив элементов создан." << endl; } else { cout << endl << "Невозможно создать массив." << endl; n = 0; } break;
case '2': if (n > 0) Show(mas, n); //Вывод массива на экран else cout << endl << "Сначала создайте массив." << endl; break;
case '3': if (n > 0) { Copy(mas, sortMas, n); //Создание копии массива PocketSortArray(sortMas, n); //Сортировка массива } else cout << endl << "Сначала создайте массив." << endl; break;
case '4': if (n > 0) { Copy(mas, sortMas, n); //Создание копии массива PocketSort(sortMas, n); //Сортировка массива } else cout << endl << "Сначала создайте массив." << endl; break;
case '0': break;
default: cout << endl << "Выберите один из предлогаемых вариантов." << endl; break; } } while(action != '0'); //cin.get();//Ожидание нажатия любой клавиши } |
Модератор: Не забываем пользоваться кнопочкой "Код"Это сообщение отредактировал(а) bsa - 11.1.2011, 22:04
|
|
|
|