c - 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
while
Segmentation fault
主要概念是寻找一个数字int min_n
,然后在数组中的每次出现时对该数字进行排序。
谢谢大家。
解决方案
size_array
如果你问这个问题,你需要像下面这样使用。
您需要比较
i
和j
与size_array
inwhile
。while (i < size_array && point[i] != min_n) { i++ }
需要检查
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;
推荐阅读
- php - 删除索引并将该数组放入键中
- laravel-livewire - 为什么jetstream modal总是设置为true并且关闭按钮不起作用
- html - 为什么即使在溢出之后我的 html 元素也没有被隐藏:hidden 属性
- php - 如何在 PHP 中将日期时间从可读格式化为可格式化
- android - 从状态栏android隐藏通知图标
- python - 如何从 Spyder 历史日志中访问未保存的文件
- javascript - 使用 useState() 切换布尔值并更新 obj
- java - android中OKHttpClient上的会话ID刷新
- android-studio - 如何解决 - java.lang.NoClassDefFoundError: 更新 android studio 后?
- javascript - iPhone 上的 CSS Translate3d 故障