Не удается реализовать пузырчатую сортировку и линейный поиск - 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
. Таким образом, данный код реализует линейный поиск значения в массиве.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д