← index
sort_ptr.c
Source: C2x.Examples/src/sort_ptr.c
#include <stdio.h>
#include <stdlib.h>

void sort(int *data, size_t s);
void swap(int *a, int *b);
void print_array(int *data, unsigned int s);

int main() {
    int values[7] = {19, 2, 42, 100, 55, 1};
    sort(values, 6);
    print_array(values, 6);
    return 0;
}

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void sort(int *data, size_t s) {
    if (s < 2)
        return;
    bool swapped = false;
    int *end = data + s;
    do {
        swapped = false;
        for (int *ptr = data; ptr < (end - 1); ++ptr) {
            if (*ptr > *(ptr + 1)) {
                swap(ptr, ptr + 1);
                swapped = true;
            }
        }
        end--;
    } while (swapped && (end - data) > 1);
}

void print_array(int *arr, unsigned int sz) {
    for (unsigned int i = 0; i < sz; ++i) {
        printf("%d: %d\n", i, arr[i]);
    }
}