C Basic Sort Algorithm

selection sort in c
bubble sorting in c
insertion sort in c
quick sort in c
sorting algorithms c++
merge sort in c
selection sort algorithm
quick sort algorithm

I'm not really understanding the process behind this basic sorting algorithm using nested For loops:

for(i=0; i<MAX; i++){
        for(j=i; j<MAX; j++){
            if(data[i] > data[j]){
                tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
        }
    }

If j=i then wouldn't it just be looping and comparing the same numbers seeing as i and j both start at 0 in the loops?

I've tried googling for an explanation on this particular bit of code and can't find anything useful.

Full program:

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

#define MAX 10

int main()
{
    int data[MAX];
    int i, j, tmp;

    for(i=0;i<MAX;i++){
        printf("Enter number %d: ", i);
        scanf("%d", &data[i]);
    }

    for(i=0; i<MAX; i++){
        for(j=i; j<MAX; j++){
            if(data[i] > data[j]){
                tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
        }
    }

    printf("\nSorted List:\n");
    for(i=0;i<MAX;i++){
        printf("Item %d: %d\n", i, data[i]);
    }
}

This algorithm is a dummified selection sort - it matches the description of selection sort on Wikipedia:

The algorithm divides the input list into two parts: the sublist of items already sorted, which is built up from left to right at the front (left) of the list, and the sublist of items remaining to be sorted that occupy the rest of the list. Initially, the sorted sublist is empty and the unsorted sublist is the entire input list. The algorithm proceeds by finding the smallest (or largest, depending on sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order), and moving the sublist boundaries one element to the right.

But indeed not the pseudo algorithm in that it does some unnecessary swaps.

In the first inner round, with i being equal to j, the comparison data[i] > data[j] will be false, and the swap will not be executed.

Then, j will be incremented, and now it is comparing ith value with i + 1th value.

To avoid one futile comparison, initialize j with i + 1:

for (i = 0; i < MAX; i++) {
    for (j = i + 1; j < MAX; j++) {
        if (data[i] > data[j]) {
            tmp = data[i];
            data[i] = data[j];
            data[j] = tmp;
        }
    }
}

What it does different from ordinary selection sort is that it makes unnecessary swaps back and forth from the ith place. The ordinary selection sort finds the minimum index and does only one swap for each element:

for (i = 0; i < MAX; i++) {
    int min = i;
    for (j = i + 1; j < MAX; j++) {
        if (data[min] > data[j]) {
            min = j;
        }
    }

    tmp = data[min];
    data[min] = data[i];
    data[i] = tmp;
}

Nevertheless, the original matches the description of selection sort (and the running time is the same, though constants are worse due to unnecessary swapping) in that:

The algorithm proceeds by finding the smallest (or largest, depending on sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order)

is realized as the algorithm finds the smallest element in the unsorted sublist, exchanging the current smallest item with the leftmost unsorted item as it goes over the list.


The C standard library already contains qsort which can be used instead of reinventing the wheel - we just need to write the comparison function:

#include <stdlib.h>

int compare_ints(const void *a, const void *b) 
{
    return (*(const int*)a - *(const int*)b);
}

int main(void) {
    ...
    qsort(data, MAX, sizeof(int), compare_ints);
    ...
}

Sorting Algorithms, Bubble Sort is a simple sorting algorithm which repeatedly compares the adjacent elements of the given array & swaps them if they are in  Sorting is one of the most basic and useful functions applied to data. It aims at arranging data in a particular fashion, which can be increasing or decreasing as per the requirements. There is a builtin function in C++ STL by the name of ‘sort()’ which allows us to perform sorting algorithm easily.


No it wouldn't loop because you'll just swap the data[i] with data[i] twice although it is better to rewrite this piece of code like this :

for(i=0; i<MAX-1; i++){
    for(j=i+1; j<MAX; j++){
        if(data[i] > data[j]){
            tmp = data[i];
            data[i] = data[j];
            data[j] = tmp;
        }
    }
}

but this two code are same.

the algorithm that this codes are using is bubble sort. If you want to have better understanding of what it does take a look at the wikipedia article.

Sorting Algorithms in C, A simple sorting algorithm implements two loops where outer loop can grow to N and for each iteration of outer loop, the inner loop can take (N - 1) iterations. So  A sorting algorithm is an algorithm that puts elements of a list in a certain order. The most-used orders are numerical order and lexicographical order. Efficient sorting is important for optimizing the use of other algorithms (such as search and merge algorithms) which require input data to be in sorted lists.


This is a Bubble Sort. The gist of it is that it swaps any two adjacent values that it finds out of order, until all of the values are in order.

Sorting Algorithms In C | C Program For Sorting, Bubble sort in C to arrange numbers in ascending order, you can modify it for descending order and can also sort strings. The bubble sort algorithm isn't efficient  Stack Overflow Public questions and answers; Teams Private questions and answers for your team; Enterprise Private self-hosted questions and answers for your enterprise; Talent Hire technical talent


The code

for(i=0; i<MAX; i++){
        for(j=i; j<MAX; j++){
            if(data[i] > data[j]){
                tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
        }
    }

Will clearly not work as it is supposed to. It basically needs to compare each and every element of the array and sorts them. Basically a bubble sort with time complexity O(n^2).

Rather than j=i

It should be j=i+1

What are different types of sorting used in C programming?, Bubble Sort in C is a sorting algorithm where we repeatedly iterate through the As a simple example, the numbers 1, 2, 3, 4, 5 are sorted in ascending order. The bubble sort Algorithm simply compares adjacent elements and exchanges them if they are out of order. To apply the Bubble Sort we follow the following steps. Compare 1st two elements and exchange them if they are out of order. Move down one element and compare 2nd and 3rd elements.


Bubble sort in C, A simple and easy tutorial for beginners to give an introduction to various sorting algorithms and why we need the sorting algorithms. Bubble sort is a simple sorting algorithm that works by repeatedly stepping through the list to be sorted, comparing each pair of adjacent items and swapping them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted.


Bubble Sort in C, In computer science, a sorting algorithm is an algorithm that puts elements of a list in a certain Insertion sort is a simple sorting algorithm that is relatively efficient for small lists and mostly sorted lists, and is often used as part of more Algorithms In C: Fundamentals, Data Structures, Sorting, Searching, Parts 1-4 (3 ed.). If the partition size is less than or equal to 16 elements, it uses an insertion sort algorithm. If the number of partitions exceeds 2 log n, where n is the range of the input array, it uses a Heapsort algorithm. Otherwise, it uses a Quicksort algorithm.


Introduction to Sorting Algorithms, Simple Visualization: sorting algorithms in c. Selection Sort Pseudo Code: for i = 0 to n - 1 // Finding the minimum element in unsorted array  Bubble Sort is the simplest sorting algorithm that works by repeatedly swapping the adjacent elements if they are in wrong order. Example: First Pass: ( 5 1 4 2 8 ) –> ( 1 5 4 2 8 ), Here, algorithm compares the first two elements, and swaps since 5 > 1. ( 1 5 4 2 8 ) –> ( 1 4 5 2 8 ), Swap since 5 > 4 ( 1 4 5 2 8 ) –> ( 1 4 2 5 8 ), Swap since 5 > 2