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; 

		}

	}

	

}