Skip to content

sorting algorithm is an algorithm that puts elements of a list into an order. The most frequently used orders are numerical order and lexicographical order, and either ascending or descending. Efficient sorting is important for optimizing the efficiency of algorithms (such as search & merge algorithms) that require input data to be in sorted lists.

Notifications You must be signed in to change notification settings

Mohamed-Mostafaaa/sorting_algorithms

Repository files navigation

0x1B. C - Sorting algorithms & Big O

ALX

sorting algorithms

meme

About

Sorting algorithms are a fundamental part of computer science, and they play a crucial role in many areas of computer science and software engineering. These algorithms are used to arrange data in a particular order, such as ascending or descending, and are essential for tasks such as searching, merging and analyzing data. There are various sorting algorithms available, each with their own strengths and weaknesses, such as efficiency and stability, and choosing the right algorithm for a specific task can greatly improve the performance of a program. Some are more efficient for large data sets, while others are better suited for small data sets. Some are easy to implement, while others are more complex. Regardless of their differences, all sorting algorithms share the goal of arranging a set of elements in a specific order, whether it be ascending or descending.

Intro

In this project, we will explore sorting algorithims. This project should be done in pair programming

Resources

Read or watch:

  1. Sorting algorithms
  2. Big O notation
  3. Sorting algorithms animation
  4. 15 Sorting algorithms in 6 minutes
  5. CS50's Algorithm exaplanation by David Malan
  6. All about sorting algorithms

Learning objectives

  • At least four different sorting algorithms
  • What is the Big O notation, and how to evaluate the time complexity of an algorithm
  • How to select the best sorting algorithm for a given input
  • What is a stable sorting algorithm

More info

Data Structures and functions

For this project, you are given the following print_array and print_list functions

#include <stdlib.h>
#include <stdio.h>

/**
 * print_array - Prints an array of integers
 *
 * @array: The array to be printed
 * @size: Number of elements in @array
 */
void print_array(const int *array, size_t size)
{
    size_t i;

    i = 0;
    while (array && i < size)
    {
        if (i > 0)
            printf(", ");
        printf("%d", array[i]);
        ++i;
    }
    printf("\n");
}
#include <stdio.h>
#include "sort.h"

/**
 * print_list - Prints a list of integers
 *
 * @list: The list to be printed
 */
void print_list(const listint_t *list)
{
    int i;

    i = 0;
    while (list)
    {
        if (i > 0)
            printf(", ");
        printf("%d", list->n);
        ++i;
        list = list->next;
    }
    printf("\n");
}
  • Our files print_array.c and print_list.c (containing the print_array and print_list functions) will be compiled with your functions during the correction.
  • Please declare the prototype of the functions print_array and print_list in your sort.h header file
  • Please use the following data structure for doubly linked list:
/**
 * struct listint_s - Doubly linked list node
 *
 * @n: Integer stored in the node
 * @prev: Pointer to the previous element of the list
 * @next: Pointer to the next element of the list
 */
typedef struct listint_s
{
    const int n;
    struct listint_s *prev;
    struct listint_s *next;
} listint_t;
  • Please, note this format is used for Quiz and Task questions.

    • O(1)
    • O(n)
    • O(n!)
    • n square -> O(n^2)
    • log(n) -> O(log(n))
    • n * log(n) -> O(nlog(n))
    • n + k -> O(n+k) …
  • Please use the “short” notation (don’t use constants). Example: O(nk) or O(wn) should be written O(n). If an answer is required within a file, all your answers files must have a newline at the end.

Test

Here is a quick tip to help you test your sorting algorithms with big sets of random integers: Random.org

About

sorting algorithm is an algorithm that puts elements of a list into an order. The most frequently used orders are numerical order and lexicographical order, and either ascending or descending. Efficient sorting is important for optimizing the efficiency of algorithms (such as search & merge algorithms) that require input data to be in sorted lists.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages