C Program for Bubble Sort on Linked List - GeeksforGeeks

15 Oct, 2018
Given a singly linked list, sort it using bubble sort.
Input : 10->30->20->5
Output : 5->10->20->30

Input : 20->4->3
Output : 3->4->20
// C program to implement Bubble Sort on singly linked list#include<stdio.h>#include<stdlib.h>  /* structure for a node */struct Node{    int data;    struct Node *next;};  /* Function to insert a node at the beginning of a linked list */void insertAtTheBegin(struct Node **start_ref, int data);  /* Function to bubble sort the given linked list */void bubbleSort(struct Node *start);  /* Function to swap data of two nodes a and b*/void swap(struct Node *a, struct Node *b);  /* Function to print nodes in a given linked list */void printList(struct Node *start);  int main(){    int arr[] = {12, 56, 2, 11, 1, 90};    int list_size, i;      /* start with empty linked list */    struct Node *start = NULL;      /* Create linked list from the array arr[].      Created linked list will be 1->11->2->56->12 */    for (i = 0; i< 6; i++)        insertAtTheBegin(&start, arr[i]);      /* print list before sorting */    printf("\n Linked list before sorting ");    printList(start);      /* sort the linked list */    bubbleSort(start);      /* print list after sorting */    printf("\n Linked list after sorting ");    printList(start);      getchar();    return 0;}    /* Function to insert a node at the beginning of a linked list */void insertAtTheBegin(struct Node **start_ref, int data){    struct Node *ptr1 = (struct Node*)malloc(sizeof(struct Node));    ptr1->data = data;    ptr1->next = *start_ref;    *start_ref = ptr1;}  /* Function to print nodes in a given linked list */void printList(struct Node *start){    struct Node *temp = start;    printf("\n");    while (temp!=NULL)    {        printf("%d ", temp->data);        temp = temp->next;    }}  /* Bubble sort the given linked list */void bubbleSort(struct Node *start){    int swapped, i;    struct Node *ptr1;    struct Node *lptr = NULL;      /* Checking for empty list */    if (start == NULL)        return;      do    {        swapped = 0;        ptr1 = start;          while (ptr1->next != lptr)        {            if (ptr1->data > ptr1->next->data)            {                 swap(ptr1, ptr1->next);                swapped = 1;            }            ptr1 = ptr1->next;        }        lptr = ptr1;    }    while (swapped);}  /* function to swap data of two nodes a and b*/void swap(struct Node *a, struct Node *b){    int temp = a->data;    a->data = b->data;    b->data = temp;}
Output:
 Linked list before sorting
90 1 11 2 56 12
 Linked list after sorting
1 2 11 12 56 90
YugandharTripathi
BubbleSort
Linked-List-Sorting
C Programs
Linked List
Sorting
Linked List
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
C Program to read contents of Whole File
Header files in C/C++ and its uses
How to Append a Character to a String in C
Producer Consumer Problem in C
Program to find Prime Numbers Between given Interval
Linked List | Set 1 (Introduction)
Linked List | Set 2 (Inserting a node)
Stack Data Structure (Introduction and Program)
Linked List | Set 3 (Deleting a node)
LinkedList in Java