Search code examples
calgorithmsortinginsertion-sortinsertion

C - Insertion Sort Algorithm


I'm trying to sort a set of numbers like this:

A[]={3,6,7,2,9,1,2,7,2}
A[]={3,6,7,2,2,2,9,1,7}

So I've made this:

void sort_min(int* point, int size_array, int min_n){
    int i = 0;
    int j = 0;
    int k = 0;
    while(point[i] != min_n){
        i++;
    }
    j = i+1;
    while(point[j] != min_n){
        j++;
    }
    k = j;
    for (j-1; j > i; j--){
        point[j] = point[j-1];
    }
    point[j] = min_n;
    j = k+1;
}

Like you can notice I've never used the int size_array cause I don't know the way to match an iterative function like a for or a while (That's the question. How to solve it?). I've done that, of course, but I've got a Segmentation fault like an answer.

The main concept is looking for a number int min_n and up to that point sort that number at each occurrence in the array.

Thanks for all.


Solution

  • You need use size_array like below, if you are asking about this.

    1. You need compare i and j with size_array in while.

      while (i < size_array && point[i] != min_n) {
            i++
      }
      
    2. Need check value of i, j after while. They may be larger or equal to size_array.

      while (i < size_array && point[i] != min_n) {
            i++
      }
      
      // I guess when you don't find min_n, function can just return.
      if (i >= size_array)   
             return;
      
      j = i+1;
      while(j < size_array && point[j] != min_n){ // Also need check j's value.
             j++;
      }
      
      // Also guess when can't find the second min_n position, function can return.
      if (j >= size_array) 
             return; 
      
      k = j
      for (; j > i; j--)  // No need j-1.
             point[j] = point[j-1];
      
      // This is useless. When code come here, j == i and point[i] == min_n;
      point[j] = min_n;  
      
      j = k+1;