Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C_C++ / Lesson3 / 2-arralg / arralg

.cpp
Скачиваний:
48
Добавлен:
10.02.2015
Размер:
3.96 Кб
Скачать
// Упражнение на алгоритмы по работе с массивами
// ---------------------------------------------
// Требуется реализовать несколько функций для работы
// с целочисленными массивами, выполняющих:
//   - поиск минимального элемента в массиве;
//   - поиск максимального элемента в массиве;
//   - последовательный поиск заданного элемента в массиве;
//   - бинарный поиск заданного элемента в упорядоченном массиве;
//   - сортировку (упорядочение) массива по возрастанию.
//
// Функции поиска минимального и максимального элементов должны
// возвращать соответствующее значение.
//
// Функции поиска заданного элемента должны возвращать его индекс
// или -1, если элемент не найден (можно возвращать указатель на
// найденный элемент или NULL)
//
// Для осуществления сортировки можно воспользоваться простейшими
// (и, увы, неэффективными) алгоритмами - простого включения, 
// простого выбора или простого обмена.
// Алгоритм простого включения заключается в следующем:
// - берем второй элемент массива, если он больше первого или равен 
//   ему - оставляем его на месте, а в противном случае помещаем его
//   на место первого, сдвигая (!) остальные элементы массива для
//   освобождения места:
// - затем берем 3-й элемент и помещаем его в нужное место в 
//   последовательности первых двух снова сдвигая элементы для
//   освобождения места
// - берем 4-й т.д., повторяем процедуру, пока не закончим.
// Алгоритм простого выбора заключается в следующем:
// - просматриваем весь массив для поиска минимума и помещаем минимум
//   на место первого элемента меняя их местами;
// - повторяем для подмассива, начинающегося со второго элемента
// - и т.д.
// Алгоритм простого обмена (метод пузырьковой сортировки) заключается
// в следующем:
// - просматриваем массив от начала и до конца, каждый раз меняя местами
//   два соседних элемента, если для них нарушена упорядоченность;
// - повторяем, пока в процессе прохода по массиву пришлось совершить
//   хотя бы один обмен.

#include <iostream>
using namespace std;
const int size_of_array=5;

int get_min(int *arr) // Можно написать int get_min(int arr[])
{
  int min=arr[0];
  for(int i=1;i< size_of_array;++i)
  {
      if (arr[i]<min) min=arr[i];
  }
  return min;
}

int get_max(int *arr)
{
  int max=arr[0];
  for(int i=1;i< size_of_array;++i)
  {
      if (arr[i]>max) max=arr[i];
  }
  return max;
}

int search_seq(int *arr, int key)
{
  int result=-1;
  for(int i=1;i< size_of_array;++i)
  {
      if (arr[i]==key) result=i;
  }
  return result;
}

void sort(int arr[])
{
   int value;
   for(int j=0;j<size_of_array;++j)
   {
     for(int i=0;i+1<size_of_array;++i)
     {
      if (arr[i]>arr[i+1])
      {
	    value=arr[i];
	    arr[i]=arr[i+1];
	    arr[i+1]=value;
      }	
     }
   }
}

int search_bin(int *arr, int key)//доделать
{
  unsigned int Left=0;
  unsigned int Right=size_of_array;
  unsigned int middle;
  if (size_of_array == 0)
    {
         cout<<"Massive is empty";
    } 
    else if (arr[0]>key)
    {
         cout<<"not found";
    } 
    else if (arr[size_of_array - 1]<key)
    {
         cout<<"not found";
    }
	 while (Left<Right)
    {
        middle=Left+(Right-Left)/2;
        if (key<= arr[middle])
        {
            Right=middle;
        }
        else
        {
            Left=middle+1;
        }
    }
    if (arr[Right]==key)
    {
         return Right;
    } else
    {
         cout<<"not found";
    }
}

int main()
{
  int arr1[size_of_array]={3, 2, 6, 98, 5};
  int key1=6;
    for(int i=0;i<size_of_array;++i)
  {
     cout<<arr1[i]<<" ";
  }	 
  cout<<endl<<"min:"<<get_min(arr1)<<endl<<"max:"<<get_max(arr1)<<endl<<"Index:"<<search_seq(arr1,key1)<<endl;
  sort(arr1);
  for(int i=0;i<size_of_array;++i)
  {
     cout<<arr1[i]<<" ";
  }	 
  cout<<endl<<search_bin(arr1,key1);
  return 0;
}