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