Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
// Упражнение на алгоритмы по работе с массивами
// ---------------------------------------------
// Требуется реализовать несколько функций для работы
// с целочисленными массивами, выполняющих:
// - поиск минимального элемента в массиве;
// - поиск максимального элемента в массиве;
// - последовательный поиск заданного элемента в массиве;
// - бинарный поиск заданного элемента в упорядоченном массиве;
// - сортировку (упорядочение) массива по возрастанию.
//
// Функции поиска минимального и максимального элементов должны
// возвращать соответствующее значение.
//
// Функции поиска заданного элемента должны возвращать его индекс
// или -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;
}