void Swap(BookWithCategoriesAuthorsAndScore[] list, int left, int right)
        {
            BookWithCategoriesAuthorsAndScore temp = list[left];

            list[left]  = list[right];
            list[right] = temp;
        }
        //public CurrentUser user { get; private set; }



        public LinkedList <BookWithCategoriesAuthorsAndScore> generateRecommendations(CurrentUser user)
        {
            LinkedList <BookWithAuthorsAndCategories> AllBooksWithAuthors = recommendationsFunctions.getAllBookWithAuthors(user);

            BookWithCategoriesAuthorsAndScore[] booksWithAuthoresAndScore = new BookWithCategoriesAuthorsAndScore[AllBooksWithAuthors.Count];
            int i = 0;

            foreach (Book book in AllBooksWithAuthors)
            {
                //BookWithAuthorsAndScore bookAuScr = new BookWithAuthorsAndScore(book as BookWithAuthors);
                BookWithCategoriesAuthorsAndScore bookAuScr = new Book(book);
                bookAuScr.Score = calculateScoreForBook(book, user);
                booksWithAuthoresAndScore[i++] = bookAuScr;
            }
            return(buildScoreSortedBooksList(booksWithAuthoresAndScore));
        }