首页 > 解决方案 > C - 插入排序算法

问题描述

我正在尝试对一组这样的数字进行排序:

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

所以我做了这个:

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;
}

就像您注意到的那样,我从未使用过int size_array原因我不知道如何匹配像 a 或 a这样的迭代函数 (这就是问题。如何解决它?)。当然,我已经这样做了,但我有一个类似的答案。 for whileSegmentation fault

主要概念是寻找一个数字int min_n,然后在数组中的每次出现时对该数字进行排序。

谢谢大家。

标签: calgorithmsortinginsertion-sortinsertion

解决方案


size_array如果你问这个问题,你需要像下面这样使用。

  1. 您需要比较ijsize_arrayin while

    while (i < size_array && point[i] != min_n) {
          i++
    }
    
  2. 需要检查i,j之后的值while。它们可能大于或等于 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;
    

推荐阅读