8085 program for bubble sort
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-
- Retrieve 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.
Please Login to comment...