snippetcMinor
Optimizations for bubble sort
Viewed 0 times
sortbubbleforoptimizations
Problem
The code performs bubble sort on the basis if any swaps has been performed in the iteration. I made it sort of independent of number of iterations as in any conventional bubble sorting code.
I went on pretty much with what I understood from the cs50 class. This mechanism looks more intuitive to me. What improvements I need to do on the design/style/method?
I went on pretty much with what I understood from the cs50 class. This mechanism looks more intuitive to me. What improvements I need to do on the design/style/method?
#include
void printMyArray(int a[],int n);
//BUBBLE SORT
int main(){
int a[] = {-1 , 2 , 0 , -3 , 5 , 1};
int n = 6;
for(;;){
int swap = 0;
int i = 0;
for(; i < n-1; i++)
if( a[i+1] <= a[i]){
int temp = a[i+1];
a[i+1] = a[i];
a[i] = temp;
swap = 1;
}
if(swap == 0)
break;
}
printMyArray(a,6);
}
void printMyArray(int a[],int n){
int i;
for(i = 0; i < n ; i++)
printf("%d\t",a[i]);
printf("\n");
}Solution
Function
-
Certainly no reason to swap when values are equal. In worse case of array
-
Use
Style
-
Rather than
-
Recommend
-
Minor: prefer
-
More useful to separate
-
Suggest fully
-
Certainly no reason to swap when values are equal. In worse case of array
{3,3,3,3}, leads to infinite loop.//if( a[i+1] <= a[i]){
if(a[i+1] < a[i]) {-
Use
size_t to index arrays.// void printMyArray(int a[],int n){
void printMyArray(int a[], size_t n) {Style
-
Rather than
int for Boolean variables use bool.#include
// int swap = 0;
bool swap = false;-
Recommend
const when able. Adds clarity to the function and allows for optimizations with some compilers.// void printMyArray(int a[],int n){
void printMyArray(const int a[], int n) {-
Minor: prefer
int *a rather than int a[] as argument in printMyArray().-
More useful to separate
main() from the code under test. Something like:int main(void) {
int a[] = {-1 , 2 , 0 , -3 , 5 , 1};
bubble_sort(a, sizeof a/ sizeof a[0]);
printMyArray(a, sizeof a/ sizeof a[0]);
return 0;
}-
Suggest fully
{} blocks. Use Idiomatic for(), Avoid n-1, as size_t n may be 0.// int i = 0;
// for(; i < n-1; i++)
for(size_t i = 1; i < n; i++) {
if(a[i] < a[i-1]) {
int temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
swap = 1;
}
}Code Snippets
//if( a[i+1] <= a[i]){
if(a[i+1] < a[i]) {// void printMyArray(int a[],int n){
void printMyArray(int a[], size_t n) {#include <stdbool.h>
// int swap = 0;
bool swap = false;// void printMyArray(int a[],int n){
void printMyArray(const int a[], int n) {int main(void) {
int a[] = {-1 , 2 , 0 , -3 , 5 , 1};
bubble_sort(a, sizeof a/ sizeof a[0]);
printMyArray(a, sizeof a/ sizeof a[0]);
return 0;
}Context
StackExchange Code Review Q#127861, answer score: 6
Revisions (0)
No revisions yet.