Prerequisite – Bubble Sort

**Problem –** Write an assembly language program in 8085 microprocessor to sort a given list of n numbers using Bubble Sort.

**Example –**

**Assumption –** Size of list is stored at 2040H and list of numbers from 2041H onwards.

**Algorithm –**

- Load size of list in C register and set D register to be 0
- Decrement C as for n elements n-1 comparisons occur
- Load the starting element of the list in Accumulator
- Compare Accumulator and next element
- If accumulator is less than or equal to the next element jump to step 8
- Swap the two elements
- Set D register to 1
- Decrement C
- If C>0 take next element in Accumulator and go to point 4
- If D=0, this means in the iteration, no exchange takes place consequently we know that it won’t take place in further iterations so the loop in exited and program is stopped
- Jump to step 1 for further iterations

**Program –**

Address | Label | Instruction | Comment |
---|---|---|---|

2000H | START | LXI H, 2040H | Load size of array |

2003H | MVI D, 00H | Clear D register to set up a flag | |

2005H | MOV C, M | Set C register with number of elements in list | |

2006H | DCR C | Decrement C | |

2007H | INX H | Increment memory to access list | |

2008H | CHECK | MOV A, M | Retrieve list element in Accumulator |

2009H | INX H | Increment memory to access next element | |

200AH | CMP M | Compare Accumulator with next element | |

200BH | JC NEXTBYTE | If accumulator is less then jump to NEXTBYTE | |

200EH | JZ NEXTBYTE | If accumulator is equal then jump to NEXTBYTE | |

2011H | MOV B, M | Swap the two elements | |

2012H | MOV M, A | ||

2013H | DCX H | ||

2014H | MOV M, B | ||

2015H | INX H | ||

2016H | MVI D, 01H | If exchange occurs save 01 in D register | |

2018H | NEXTBYTE | DCR C | Decrement C for next iteration |

2019H | JNZ CHECK | Jump to CHECK if C>0 | |

201CH | MOV A, D | Transfer contents of D to Accumulator | |

201DH | CPI 01H | Compare accumulator contents with 01H | |

201FH | JZ START | Jump to START if D=01H | |

2022H | HLT | HALT |

**Explanation-**

- Retrive an element in accumulator.
- Compare it with next element, if it is greater then swap otherwise move to next index.
- If in one entire loop there has been no exchange, halt otherwise start the whole iteration again.
- The following approach has two loops, one nested inside other so-
Worst and Average Case Time Complexity: O(n*n). Worst case occurs when array is reverse sorted.

Best Case Time Complexity: O(n). Best case occurs when array is already sorted.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- 8085 program to add two 8 bit numbers
- 8085 program to add 2-BCD numbers
- 8085 program to add two 16 bit numbers
- 8085 program to reverse 16 bit number
- 8085 program for hexadecimal counter
- 8085 program to find the sum of a series
- 8085 program to find the set bit of accumulator
- 8085 program to check whether the given number is even or odd
- 8085 program to multiply two 16-bit numbers
- 8085 program to add numbers in an array
- 8085 program to divide two 16 bit numbers
- 8085 program to divide two 8 bit numbers
- 8085 program for Binary search
- 8085 program to sum of two 8 bit numbers without carry
- 8085 program for Linear search | Set 2
- 8085 program for pulse waveform
- 8085 program to multiply two 8 bit numbers
- 8085 program to swap two 8-bit numbers
- 8085 program to reverse 8 bit number
- 8085 program to find square of a 8 bit number

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.