Bubble sort algorithm starts by comparing the first
two elements of an array and swapping if necessary, i.e., if you want to sort
the elements of array in ascending order and if the first element is greater
than second then, you need to swap the elements but, if the first element is
smaller than second, you mustn't swap the element.
Then, again second and third elements are compared and swapped if it is necessary and this process go on until last and second last element is compared and swapped. This completes the first step of bubble sort.
Then, again second and third elements are compared and swapped if it is necessary and this process go on until last and second last element is compared and swapped. This completes the first step of bubble sort.
If there are n elements to be sorted then, the
process mentioned above should be repeated n-1 times to get required result.
But, for better performance, in second step, last and second last elements are
not compared as the element is automatically placed at last after
first step.
In the third step, last and second last, second last and third last elements are not compared and so on. Graphical representation of bubble sort:
In the third step, last and second last, second last and third last elements are not compared and so on. Graphical representation of bubble sort:
#include <stdio.h>
int main() {
int data[100],i,n,step,temp;
/* get the number of inputs from the user */
printf("Enter How Many Data You Want To Sort:
");
scanf("%d",&n);
if(n<=0) printf("\n\tWrong Input?\n");
else {
for(i=0;i<n;++i) {
printf("\n(%d) Enter Element: ",i+1);
scanf("%d",&data[i]);
}
for(step=0;step<n-1;++step)
for(i=0;i<n-step-1;++i) {
if(data[i]>data[i+1]) /* To sort in descending order, only change
> to < in this line. No more modification required. */
{
temp=data[i];
data[i]=data[i+1];
data[i+1]=temp;
}}
printf("\nAfter Sorting In Ascending Order:
");
for(i=0;i<n;++i)
printf("%d
",data[i]);
printf("\n");
return 0;
}}
Method 2: Using Function
#include<stdio.h>
void bubble_sort(int[], int);
int main() {
int arr[200], num, i;
printf("Enter How Many Data You Want To Sort:
");
scanf("%d", &num);
if(num<=0) printf("\n\tWrong
Input?\n");
else {
printf("\nEnter %d Elements:\n",num);
for (i = 0; i < num; i++)
scanf("%d", &arr[i]);
bubble_sort(arr, num);
}}
void bubble_sort(int iarr[], int num) {
int i, j, k, temp;
printf("\nUnsorted Data: ");
for (k = 0; k < num; k++) {
printf("%5d", iarr[k]);
}
for (i = 1; i < num; i++) {
for (j = 0; j < num - 1; j++) {
if (iarr[j] > iarr[j + 1]) { /* To sort in
descending order, only change > to < in this line. No more modification
required. */
temp = iarr[j];
iarr[j] = iarr[j + 1];
iarr[j + 1] = temp;
}}
printf("\n\nAfter pass %d : ", i);
for (k = 0; k < num; k++) {
printf("%5d", iarr[k]);
}}}
Method 3: Using Recursion and Pointer
#include <stdio.h>
#include <stdlib.h>
void bubbleSort(int *data, int n) {
int i, temp;
if (n > 0) {
for (i = 1; i < n; i++) {
if (data[i - 1] > data[i]) { /* To sort in descending order, only change
> to < in this line. No more modification required. */
temp = data[i];
data[i] = data[i - 1];
data[i - 1] = temp;
}}
bubbleSort(data, n - 1);
}
return;
}
int main() {
int i, n, *data;
/* get the number of inputs from the user */
printf("Enter How Many Data You Want To Sort:
");
scanf("%d", &n);
if(n<=0) printf("\n\tWrong Input?\n");
else {
/* dynamically allocate memory to store values */
data = (int *) malloc(sizeof(int) * n);
/* get the input data from the user */
for (i = 0; i < n; i++) {
printf("\n(%d) Enter Element: ",i+1);
scanf("%d", &data[i]);
}
/* sorts the given numbers */
bubbleSort(data, n);
/* print the sorted numbers */
printf("\nAfter Sorting In Ascending Order:
");
for (i = 0; i < n; i++) {
printf("%d
", data[i]);
}
printf("\n");
return 0;
}}
Method 4: Using 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 begining of a
linked lsit */
void insertAtTheBegin(struct node **start_ref, int
data);
/* Function to bubble sort the given linked lsit */
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[200], n, i;
printf("Enter How Many Data You Want To Sort:
");
scanf("%d", &n);
if(n<=0) printf("\n\tWrong Input?\n");
else {
for(i=0;i<n;++i) {
printf("\n(%d) Enter Element: ",i+1);
scanf("%d",&arr[i]);
}
/* start with empty linked list */
struct node *start = NULL;
/* Create linked list from the array arr[]. */
for (i = 0; i<n; i++)
insertAtTheBegin(&start, arr[i]);
/* sort the linked list */
bubbleSort(start);
/* print list after sorting */
printf("\nAfter Sorting In Ascending Order:
");
printList(start);
printf("\n");
getchar();
return 0;
}}
/* Function to insert a node at the begining of a
linked lsit */
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;
while (temp!=NULL) {
printf("%d
", temp->data);
temp = temp->next;
}}
/* Bubble sort the given linked lsit */
void bubbleSort(struct node *start) {
int swapped, i;
struct node *ptr1;
struct node *lptr = NULL;
/* Checking for empty list */
if (ptr1 == NULL)
return;
do {
swapped = 0;
ptr1 = start;
while (ptr1->next != lptr) {
if (ptr1->data > ptr1->next->data) /* To sort in descending order, only change
> to < in this line. No more modification required. */
{
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;
}