C/C++
Язык Си. Сортировка и поиск элементв массива
Я еще не закончил писать весь код, решил проверить работает ли уже написанная часть - нет, ни в какую. Почему когда я ввожу любое число, кроме первого, которое нужно найти в массиве, он просто заканчивает свою работу? Писал последние числа отсортированного массива и которое по середине - не работает, надеюсь я понятно обьяснил, что хотел сказать
#include <stdio.h>
#include <stdlib.h>
#define BUFFER 100
size_t length(void) {
size_t value;
do {
printf("Введите количество элементов: ");
scanf("%zu", &value);
} while (!value || value > BUFFER);
return value;
}
void fill(int* box, size_t n) {
size_t i = 0;
printf("Введите %zu целочисленных значений: ", n);
do scanf("%i", &box[i]); while (++i < n);
}
int compare(const void* pa, const void* pb) {
return *(int*)pa - *(int*)pb;
}
void show(const char* msg, int* box, size_t n) {
size_t i = 0;
printf("%s", msg);
do printf("%i ", box[i]); while (++i < n);
puts("");
}
int integer(const char* msg) {
int value;
printf("%s", msg);
scanf("%i", &value);
return value;
}
size_t find(int src, int* box, size_t n) {
size_t i = 0;
do if (box[i] == src) break; while (++i < n);
return i;
}
int main(void) {
size_t n = length();
int value = 0;
size_t pos = -1;
int box[BUFFER];
fill(box, n);
qsort(box, n, sizeof(int), compare);
show("Отсортированный массив: ", box, n);
value = integer("Введите число которое нужно найти: ");
pos = find(value, box, n);
if (pos == n) puts("Значение не найдено!");
else printf("Значение %i найдено! Его индекс: %zu\n", box[pos], pos);
return 0;
}
#include <stdlib.h>
#define BUFFER 100
size_t length(void) {
size_t value;
do {
printf("Введите количество элементов: ");
scanf("%zu", &value);
} while (!value || value > BUFFER);
return value;
}
void fill(int* box, size_t n) {
size_t i = 0;
printf("Введите %zu целочисленных значений: ", n);
do scanf("%i", &box[i]); while (++i < n);
}
int compare(const void* pa, const void* pb) {
return *(int*)pa - *(int*)pb;
}
void show(const char* msg, int* box, size_t n) {
size_t i = 0;
printf("%s", msg);
do printf("%i ", box[i]); while (++i < n);
puts("");
}
int integer(const char* msg) {
int value;
printf("%s", msg);
scanf("%i", &value);
return value;
}
size_t find(int src, int* box, size_t n) {
size_t i = 0;
do if (box[i] == src) break; while (++i < n);
return i;
}
int main(void) {
size_t n = length();
int value = 0;
size_t pos = -1;
int box[BUFFER];
fill(box, n);
qsort(box, n, sizeof(int), compare);
show("Отсортированный массив: ", box, n);
value = integer("Введите число которое нужно найти: ");
pos = find(value, box, n);
if (pos == n) puts("Значение не найдено!");
else printf("Значение %i найдено! Его индекс: %zu\n", box[pos], pos);
return 0;
}
> Почему когда я ввожу любое число, кроме первого, которое нужно найти в массиве, он просто заканчивает свою работу?
Потому что программа написана неверно
Потому что программа написана неверно
>lsat=n-1;
>midle=last\2;
полагаю что должно быть
last=arr[n];
>midle=last\2;
полагаю что должно быть
last=arr[n];
Похожие вопросы
- Язык Си. Сортировка и поиск элементов массива
- Упорядочить элементы массива по возрастанию на языке Си
- Помогите добавить ввод чисел в массив матрицы на языке Си
- Как ввести строчный массив через scanf_s в языке Си
- Как обработать этот массив на языке Си?
- Одномерные массивы на языке си
- Массивы в языке Си
- Кто поможет в языке Си, с массивом. Не могу понять как сделать
- Решить задачу на языке СИ
- Написать код на языке си
В первую очередь в том что в вопросе нет формулировки задачи, которую пытаетесь решить.
>Почему когда я ввожу любое число, кроме первого, которое нужно найти в массиве, он просто заканчивает свою работу?
Потому что программа так написана. Возможно также потому, что в ней нет никаких попыток сделать поиск в массиве.
Если речь идёт о пузырьковой сортировке и последующем бинарном поиске в отсортированном массиве, то данный код очень слабо соотносится с этой задачей. Вам в предыдущих ответах кинули какие-то реализации этих методов