Не удается реализовать пузырчатую сортировку и линейный поиск - C (СИ)
Формулировка задачи:
Добрый день всем, я для саморазвития решил изучить основы Си, сам я очень далек от программирования.
Сейчас прохожу небольшой курс, выполняю практическую работу, но столкнулся с проблемой которую у меня не выходит решить.
Изначально мне даны четыре программы:
В программе helpers.c, я должен написать функцию сортировки, и функцию линейного поиска.
Это я и попытался сделать, вот так выглядит мой код:
Остальные программы я не видоизменял.
При попытке, проверить программу в автоматическим тестировании я вижу такой результат
Я не очень понимаю, где ошибся, может быть кто знает?
Листинг программы
- generate.c
- /**
- * generate.c
- *
- * Computer Science 50
- * Problem Set 3
- *
- * Generates pseudorandom numbers in [0,LIMIT), one per line.
- *
- * Usage: generate n [s]
- *
- * where n is number of pseudorandom numbers to print
- * and s is an optional seed
- */
- #define _XOPEN_SOURCE
- #include <cs50.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- // constant
- #define LIMIT 65536
- int main(int argc, string argv[])
- {
- // TODO: comment me
- if (argc != 2 && argc != 3)
- {
- printf("Usage: generate n [s]\n");
- return 1;
- }
- // TODO: comment me
- int n = atoi(argv[1]);
- // TODO: comment me
- if (argc == 3)
- {
- srand48((long int) atoi(argv[2]));
- }
- else
- {
- srand48((long int) time(NULL));
- }
- // TODO: comment me
- for (int i = 0; i < n; i++)
- {
- printf("%i\n", (int) (drand48() * LIMIT));
- }
- // success
- return 0;
- }
- find.c
- /**
- * find.c
- *
- * Computer Science 50
- * Problem Set 3
- *
- * Prompts user for as many as MAX values until EOF is reached,
- * then proceeds to search that "haystack" of values for given needle.
- *
- * Usage: ./find needle
- *
- * where needle is the value to find in a haystack of values
- */
- #include <cs50.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include "helpers.h"
- // maximum amount of hay
- const int MAX = 65536;
- int main(int argc, string argv[])
- {
- // ensure proper usage
- if (argc != 2)
- {
- printf("Usage: ./find needle\n");
- return -1;
- }
- // remember needle
- int needle = atoi(argv[1]);
- // fill haystack
- int size;
- int haystack[MAX];
- for (size = 0; size < MAX; size++)
- {
- // wait for hay until EOF
- printf("\nhaystack[%i] = ", size);
- int straw = GetInt();
- if (straw == INT_MAX)
- {
- break;
- }
- // add hay to stack
- haystack[size] = straw;
- }
- printf("\n");
- // sort the haystack
- sort(haystack, size);
- // try to find needle in haystack
- if (search(needle, haystack, size))
- {
- printf("\nFound needle in haystack!\n\n");
- return 0;
- }
- else
- {
- printf("\nDidn't find needle in haystack.\n\n");
- return 1;
- }
- }
- helpers.c
- /**
- * helpers.c
- *
- * Computer Science 50
- * Problem Set 3
- *
- * Helper functions for Problem Set 3.
- */
- #include <cs50.h>
- #include "helpers.h"
- /**
- * Returns true if value is in array of n values, else false.
- */
- bool search(int value, int values[], int n)
- {
- // TODO: implement a searching algorithm
- return false;
- }
- /**
- * Sorts array of n values.
- */
- void sort(int values[], int n)
- {
- // TODO: implement an O(n^2) sorting algorithm
- return;
- }
- helpers.h
- /**
- * helpers.h
- *
- * Computer Science 50
- * Problem Set 3
- *
- * Helper functions for Problem Set 3.
- */
- #include <cs50.h>
- /**
- * Returns true if value is in array of n values, else false.
- */
- bool search(int value, int values[], int n);
- /**
- * Sorts array of n values.
- */
- void sort(int values[], int n);
Листинг программы
- helpers.c
- #include <cs50.h>
- #include "helpers.h"
- bool search(int value, int values[], int n)
- {
- for (int i = 0; i < n; i++)
- {
- if (values[n] == value)
- {
- return true;
- }
- return false;
- }
- }
- void sort(int values[], int n)
- {
- int temp;
- int ctr = 0;
- int didswap;
- do
- {
- didswap = 0;
- for (int i = 0; i < n; i++)
- {
- if (values[i] > values[i + 1])
- {
- temp = values[i];
- values[i] = values[i + 1];
- values[i + 1] = temp;
- didswap = 1;
- }
- }
- ctr = ctr + 1;
- }
- while (ctr < n && didswap != 0);
- }
Еще мне не очень понятно, почему при запуске команды - "./generate 10 50 | ./find 127", я получаю пустой массив. Ведь , как я понимаю должно было сгенерироваться 10 псевдослучайных чисел, и переместиться в программу find, и заполнить массив из haystack[].
а я получаю:
Решение задачи: «Не удается реализовать пузырчатую сортировку и линейный поиск»
textual
Листинг программы
- bool search(int value, int values[], int n)
- {
- for (int i = 0; i < n; i++)
- {
- if (values[n] == value)
- {
- return true;
- }
- //сразу уходим как первый раз не нашли, может нужно вынести return false; из цикла?
- return false;
- }
- }
Объяснение кода листинга программы
В данном коде реализована функция поиска значения в массиве.
bool search(int value, int values[], int n)
- это объявление функции с тремя параметрами:value
- значение, которое мы ищем в массиве,values
- сам массив,n
- его размер. Функция возвращаетtrue
, если значение найдено, иfalse
в противном случае.for (int i = 0; i < n; i++)
- это цикл, который проходит по всем элементам массива. На каждой итерации значениеi
увеличивается на 1.if (values[n] == value)
- это условие, при котором мы нашли искомое значение. В данном случае мы сравниваемvalue
с элементом массива с индексомn
.return true;
- если условие выполнено, то функция возвращаетtrue
.return false;
- если мы не нашли искомое значение после прохода по всем элементам массива, то возвращаемfalse
. Таким образом, данный код реализует линейный поиск значения в массиве.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д