/* * C Program sorts the numbers in ascending order using quicksort (quick_sort.c) */ /* #include #define MAXSIZE 1000 void array_print(char *s, int heap[], int no) { int i; printf("%s ", s); for (i = 0; i < no; i++) printf("%d ", heap[i]); printf("\n"); } void swap (int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void quick_sort(int list[], int low, int high) { int pivot, low_index, high_index; if (low < high) { pivot = list[low]; low_index = low; high_index = high; while (low_index < high_index) { while (list[low_index] <= pivot && low_index <= high) { low_index++; // from low, find an element > pivot } while (list[high_index] > pivot && high_index >= low) { high_index--; // from high, find an element <= pivot } if (low_index < high_index) { // two elements is in wrong order swap(&list[low_index], &list[high_index]); // swap two elements } } // all elements are checked swap(&list[low], &list[high_index]); // put pivot in final position quick_sort(list, low, high_index-1); // sort low part quick_sort(list, high_index+1, high); // sort high part } } int main() { int array[MAXSIZE]; int i, num; printf("enter the number of elements n = "); scanf("%d", &num); printf("enter %d elements one by one\n", num); for (i = 0; i < num; i++) { scanf("%d", &array[i]); } array_print("\nthe original array is", array, num); quick_sort(array, 0, num - 1); array_print("the sorted array is", array, num); return 0; } */ .text array_print: addiu $sp,$sp,-32 sw $31,28($sp) sw $fp,24($sp) move $fp,$sp sw $4,32($fp) sw $5,36($fp) sw $6,40($fp) lui $2,%hi($LC0) addiu $4,$2,%lo($LC0) lw $5,32($fp) jal printf nop sw $0,16($fp) j $L2 nop $L3: lw $2,16($fp) nop sll $2,$2,2 lw $3,36($fp) nop addu $2,$3,$2 lw $3,0($2) lui $2,%hi($LC1) addiu $4,$2,%lo($LC1) move $5,$3 jal printf nop lw $2,16($fp) nop addiu $2,$2,1 sw $2,16($fp) $L2: lw $3,16($fp) lw $2,40($fp) nop slt $2,$3,$2 bne $2,$0,$L3 nop li $4,10 jal putchar nop move $sp,$fp lw $31,28($sp) lw $fp,24($sp) addiu $sp,$sp,32 j $31 nop swap: addiu $sp,$sp,-16 sw $fp,12($sp) move $fp,$sp sw $4,16($fp) sw $5,20($fp) lw $2,16($fp) nop lw $2,0($2) nop sw $2,0($fp) lw $2,20($fp) nop lw $3,0($2) lw $2,16($fp) nop sw $3,0($2) lw $2,20($fp) lw $3,0($fp) nop sw $3,0($2) move $sp,$fp lw $fp,12($sp) addiu $sp,$sp,16 j $31 nop quick_sort: addiu $sp,$sp,-40 sw $31,36($sp) sw $fp,32($sp) move $fp,$sp sw $4,40($fp) sw $5,44($fp) sw $6,48($fp) lw $3,44($fp) lw $2,48($fp) nop slt $2,$3,$2 beq $2,$0,$L5 nop lw $2,44($fp) nop sll $2,$2,2 lw $3,40($fp) nop addu $2,$3,$2 lw $2,0($2) nop sw $2,24($fp) lw $2,44($fp) nop sw $2,16($fp) lw $2,48($fp) nop sw $2,20($fp) j $L7 nop $L14: j $L8 nop $L10: lw $2,16($fp) nop addiu $2,$2,1 sw $2,16($fp) $L8: lw $2,16($fp) nop sll $2,$2,2 lw $3,40($fp) nop addu $2,$3,$2 lw $3,0($2) lw $2,24($fp) nop slt $2,$2,$3 bne $2,$0,$L9 nop lw $3,16($fp) lw $2,48($fp) nop slt $2,$2,$3 beq $2,$0,$L10 nop $L9: j $L11 nop $L13: lw $2,20($fp) nop addiu $2,$2,-1 sw $2,20($fp) $L11: lw $2,20($fp) nop sll $2,$2,2 lw $3,40($fp) nop addu $2,$3,$2 lw $3,0($2) lw $2,24($fp) nop slt $2,$2,$3 beq $2,$0,$L12 nop lw $3,20($fp) lw $2,44($fp) nop slt $2,$3,$2 beq $2,$0,$L13 nop $L12: lw $3,16($fp) lw $2,20($fp) nop slt $2,$3,$2 beq $2,$0,$L7 nop lw $2,16($fp) nop sll $2,$2,2 lw $3,40($fp) nop addu $4,$3,$2 lw $2,20($fp) nop sll $2,$2,2 lw $3,40($fp) nop addu $2,$3,$2 move $5,$2 jal swap nop $L7: lw $3,16($fp) lw $2,20($fp) nop slt $2,$3,$2 bne $2,$0,$L14 nop lw $2,44($fp) nop sll $2,$2,2 lw $3,40($fp) nop addu $4,$3,$2 lw $2,20($fp) nop sll $2,$2,2 lw $3,40($fp) nop addu $2,$3,$2 move $5,$2 jal swap nop lw $2,20($fp) nop addiu $2,$2,-1 lw $4,40($fp) lw $5,44($fp) move $6,$2 jal quick_sort nop lw $2,20($fp) nop addiu $2,$2,1 lw $4,40($fp) move $5,$2 lw $6,48($fp) jal quick_sort nop $L5: move $sp,$fp lw $31,36($sp) lw $fp,32($sp) addiu $sp,$sp,40 j $31 nop main: addiu $sp,$sp,-4032 sw $31,4028($sp) sw $fp,4024($sp) move $fp,$sp lui $2,%hi($LC2) addiu $4,$2,%lo($LC2) jal printf nop addiu $3,$fp,4020 lui $2,%hi($LC3) addiu $4,$2,%lo($LC3) move $5,$3 jal scanf nop lw $3,4020($fp) lui $2,%hi($LC4) addiu $4,$2,%lo($LC4) move $5,$3 jal printf nop sw $0,16($fp) j $L16 nop $L17: addiu $3,$fp,20 lw $2,16($fp) nop sll $2,$2,2 addu $3,$3,$2 lui $2,%hi($LC3) addiu $4,$2,%lo($LC3) move $5,$3 jal scanf nop lw $2,16($fp) nop addiu $2,$2,1 sw $2,16($fp) $L16: lw $2,4020($fp) lw $3,16($fp) nop slt $2,$3,$2 bne $2,$0,$L17 nop lw $3,4020($fp) addiu $5,$fp,20 lui $2,%hi($LC5) addiu $4,$2,%lo($LC5) move $6,$3 jal array_print nop lw $2,4020($fp) nop addiu $2,$2,-1 addiu $3,$fp,20 move $4,$3 move $5,$0 move $6,$2 jal quick_sort nop lw $3,4020($fp) addiu $5,$fp,20 lui $2,%hi($LC6) addiu $4,$2,%lo($LC6) move $6,$3 jal array_print nop move $2,$0 move $sp,$fp lw $31,4028($sp) lw $fp,4024($sp) addiu $sp,$sp,4032 j $31 nop .data $LC0: .ascii "%s \000" $LC1: .ascii "%d \000" $LC2: .ascii "enter the number of elements n = \000" $LC3: .ascii "%d\000" $LC4: .ascii "enter %d elements one by one\012\000" $LC5: .ascii "\012the original array is\000" $LC6: .ascii "the sorted array is\000" .end