- •5.1. Что такое массив?
- •Int myArray[100];
- •5.2. Многомерные массивы
- •5.3. Инициализация массивов
- •5.4. Определение числа элементов массива
- •5.5. Операции с массивами
- •5.5.1. Ввод и вывод массива
- •5.5.2. Поиск минимального (максимального) элемента массива
- •5.5.3. Поиск в массиве заданного элемента
- •5.5.4. Сортировка массива
- •5.6. Строки
- •5.6.1. Основы техники строк
- •5.6.2. Некоторые библиотечные функции обработки строк
- •5.6.3. Примеры обработки строк
- •5.7. Массивы строк
- •5.7.1. Пример использования массива строк
5.5.3. Поиск в массиве заданного элемента
При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет. Например, проверить, есть ли в списке студентов фамилия Петров. Задачи такого типа называются поиском в массиве.
Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой — это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.
В листинге 5.3 приведен пример поиска заданного элемента массива простым перебором. Перебор элементов массива осуществляется инструкцией while, в теле которой инструкция if сравнивает текущий элемент массива с образцом и прерывает цикл с помощью оператора break, если текущий элемент и образец равны.
// poiskOpredElementa.cpp : Defines the entry point for the console application.
//Листинг 5.3. Простой перебор
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main(int argc, char* argv[])
{
const int SIZE =10;//razmer massiva
int a[SIZE];
// vvod massiva
for (int i = 0; i < SIZE; i++)
{
a [i]= 1 + rand () % 10 ;//massiv tselyh chisel
cout << a[i] << '\t';
} // end for
int obr; // obrazets dlya poiska
// vvod obraztsa dlya poiska
cin >> obr;
// poisk zadannogo elementa massiva pereborom
int i=0;
while(i <= SIZE-1)
{
if (a[i]==obr)
{
cout << "Sovpadenie s elementom nomer"
<< i <<"\t" << a[i]<<endl;
break;
} // end if
else
if (i==SIZE-1)
cout <<"i= " << i << "sovpadeniya net!";
i++;
} // end while
getch();
return 0;
}
5.5.4. Сортировка массива
Под сортировкой массива подразумевается процесс перестановки элементов массива, целью которого является размещение элементов массива в определенном порядке. Например, если имеется массив целых чисел а, то после выполнения сортировки по возрастанию должно выполняться условие:
a[1] < a[2] < … < a[size]
где size — верхняя граница индекса массива.
Существует много методов (алгоритмов) сортировки массивов. Рассмотрим один из них - метод прямого выбора.
Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:
Просматривая массив от первого элемента, найти минимальный элемент и поместить его на место первого элемента, а первый — на место минимального.
Просматривая массив от второго элемента, найти минимальный элемент и поместить его на место второго элемента, а второй — на место минимального.
И так далее до предпоследнего элемента.
В листинге 5.4 приведена реализация этого метода.
// sortArr.cpp : Defines the entry point for the console application.
//
//Листинг 5.4. Сортировка массива прямым выбором
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main(int argc, char* argv[])
{
// vvod massiva
int a[]={5,3,17,39,33,1,2,16,18}; // massiv tselyh chisel
const int SIZE = sizeof(a)/sizeof(int);// razmer massiva
cout <<"SIZE =" <<SIZE <<endl;
int min; // nomer min elementa
int buf; // bufer, ispol'zuemyi pri obmene elementov massiva
int j; // nomer elementa, sravnivaemogo s min
for (int i=0; i<=SIZE-2; i++)
{
min=i;
for (j=i+1; j<=SIZE-1; j++)
if (a[j] < a[min])
min=j;
buf= a[i];
a[i]=a[min];
a[min]=buf;
} // end for i
for (int k=0; k<=SIZE-1; k++)
{
if (k==0) cout << "\nelementy massiva \n\n";
cout << a[k] << endl;
} // end for k
getch();
return 0;
}
