Untitled
unknown
plain_text
2 years ago
3.2 kB
14
Indexable
//поиск
bool corr;
int num_D;
num_D = ui->search_le->text().toDouble(&corr);
if (num_D >__INT_MAX__ or num_D < -__INT_MAX__)
{
QMessageBox::warning(this,"ошибка","число должно быть не больше 2 147 483 647");
return;
}
if (!corr)
{
QMessageBox::warning(this,"ошибка","Нужно ввести число");
return;
}
int key = ui->search_le->text().toInt(&corr);
//проверка на отсортированность массива
bool sort = true;//true - отсортирован, false - не отсортирован
for (int i = 1; i<row;++i)
{
if (mas[i-1]>mas[i])
{
sort = false;
break;
}
}
int count = 0;//счет для кол-ва чисел в массиве
QString IndexSearch;//номера ячеек с искомым числом
if (!sort)//если массив не отсортирован, то используем линейный поиск
{
ui->typeSearch_lb->setText("Линейный поиск");
for (int i = 0; i<row;i++)
{
if (mas[i] == key)
{
count++;
IndexSearch.append(QString::number(i+1)+" ; ");
ui->tableWidget-> item(i, 0) -> setBackgroundColor(Qt :: green);
}
}
}
else
{//используем бинарный поиск если массив отсортирован
ui->typeSearch_lb->setText("Бинарный поиск");
QVector<int> resultIndexes;//вектор с найденными строками
//задаем границы поиска
int min_indx = 0;
int max_indx = row - 1;
while (min_indx <= max_indx)
{
int mid_indx = (min_indx+max_indx)/2;
if (mas[mid_indx]<key)
{
min_indx = mid_indx +1;
}
else if (mas[mid_indx]>key)
{
max_indx=mid_indx-1;
}
else
{
count++;
resultIndexes.append(mid_indx+1);
//смотрим по сторонам
int left_num = mid_indx - 1;
int right_num = mid_indx + 1;
while (left_num >= min_indx && mas[left_num]==key)
{
count++;
resultIndexes.append(left_num+1);
left_num--;
}
while (right_num <= max_indx && mas [right_num]==key)
{
count++;
resultIndexes.append(right_num+1);
right_num++;
}
break;
}
}
std::sort(resultIndexes.begin(),resultIndexes.end());//сортируем вектор
for (int num:resultIndexes)
{
IndexSearch.append(QString::number(num)+" ; ");
ui->tableWidget-> item(num-1, 0) -> setBackgroundColor(Qt :: green);
}
}
ui->otvet->setText(QString::number(count));
ui->textEdit->setText(IndexSearch);
no_auto_change = true;
delete [] mas;
mas = nullptr;Editor is loading...
Leave a Comment