C programming: how to implement insertion sorting?

Say I have a list of numbers:

89 12 18 4 6 

and I want to implement insertion sorting and print each sorting step on the screen:

 Sort 1. 12 89 18 4 6 Sort 2. 4 12 89 18 6 Sort 3. 4 6 12 89 18 Sort 4. 4 6 12 18 89 

here is the code that i have so far, i'm confused about where to embed printf inside the loop.

 void insertion_sort(FILE *fp, int ar[15]) { int i, j, temp; for (i = 0; i < 15; i++) printf("%d\n", ar[i]); for(i = 0; i < 15; i++) { temp = ar[i]; for(j = i - 1; j >= 0 && ar[j] > temp; j--) ar[j + 1] = ar[j]; ar[j + 1] = temp; } 
+4
source share
2 answers

Your sorting scheme is actually sorting sorting:

  Sort 1. 12 89 18 4 6 Sort 2. 4 12 89 18 6 Sort 3. 4 6 12 89 18 Sort 4. 4 6 12 18 89 

it finds the smallest number and puts it at the top of the list. Normal insertion sorting will do the following:

  Sort 1. 12 89 18 4 6 Sort 2. 12 18 89 4 6 Sort 3. 4 12 18 89 6 Sort 4. 4 6 12 18 89 

and he finds that 18 is less than 89 but greater than 12 and inserts 18 between 12 and 89 and the first iteration is performed. Then repeat the process.

Here is my code:

 void insertion(int *x,int n){ // int *x - array, n- array length int i,j,k,temp,elem; // i,j,k - counters, elem - to store the element at pos x[i] for(i=0;i<n;i++){ elem=x[i]; // store the element j=i; while(j>0 && x[j-1]>elem){ // the magic(actual sorting) x[j]=x[j-1]; j--; } x[j]=elem; // swap the elements if(i>=1){ // here begins printing every sorting step, i>=1 because first time j is not greater than 0 so it just run through the loop first time printf("sort %d. ",i); // printing the step for(k=0;k<n;k++) // loop through array printf("%d ",x[k]); // display the elements already sorted printf("\n"); // when the array is displayed, insert a \n so that the next display will be on a new line } } } 
+1
source

Put it at the end of the outer for the statement immediately after ar [j + 1] = temp; and until the end of the for loop

0
source

All Articles