Witam, miałem napisać program, który ma dwie funkcje i mierzy czas ich wykonania. Jedna do sortowania tablicy a druga do listy jednokierunkowej. Napisałem obie, funkcja do sortowania tablicy działa dobrze ale nie potrafię znaleźć błędu w funkcji listSort() bo program z niej nie chce wyjść. Sprawdzałem warunek głównej pętli i w pewnym momencie nie jest spełniony. Jakby ktoś mógł na to zerknąć i ewentualnie nakierować gdzie popełniłem błąd to byłbym wdzięczny.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define SIZE 5000
struct node {
struct node * next;
int value;
} *entry_node = NULL;
typedef struct node * node_pointer;
void arraySort(int[], int);
void listSort(node_pointer);
int main() {
//init
srand(time(NULL));
int tab[SIZE], i;
clock_t s, f;
double array_sort_time = 0.0, list_sort_time = 0.0;
//filling array with random numbers
for (i = 0; i < SIZE; i++) {
tab[i] = (rand() % 10000) + 1;
}
s = clock();
arraySort(tab, SIZE);
f = clock();
array_sort_time = (double)(f - s) / (double)(CLOCKS_PER_SEC);
for (i = 0; i < SIZE; i++) {
struct node *new_node, *current;
new_node = (struct node *)malloc(sizeof(struct node));
new_node->value = (rand() % 10000) + 1;
new_node->next = NULL;
if (entry_node == NULL)
{
entry_node = new_node;
current = new_node;
}
else
{
current->next = new_node;
current = new_node;
}
}
s = clock();
listSort(entry_node);
f = clock();
list_sort_time = (double)(f - s) / (double)(CLOCKS_PER_SEC);
printf("\n Czas sortowania tablicy: %.5f", array_sort_time);
printf("\n Czas sortowania listy: %.5f", list_sort_time);
getchar();
return 0;
}
void arraySort(int tab[], int size) {
int i, j, position, swap;
for (i = 0; i < size - 1; i++) {
position = i;
for (j = i + 1; j < size; j++) {
if (tab[position] > tab[j]) {
position = j;
}
}
swap = tab[i];
tab[i] = tab[position];
tab[position] = swap;
}
}
void listSort(node_pointer node) {
for (; node != NULL; node = node->next)
{
node_pointer min = node;
for (node_pointer j = node->next; j != NULL; j = j->next) {
if (j->value < min->value) {
min = j;
}
node_pointer tmp = node;
node = min;
tmp->next = node->next;
min->next = tmp;
}
}
}