C - 插入排序算法
C - Insertion Sort Algorithm
我正在尝试对一组这样的数字进行排序:
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 这样的迭代函数for
or a while
(就是这个问题,怎么解?)。当然,我已经做到了,但是我得到了 Segmentation fault
之类的答案。
主要概念是寻找一个数字 int min_n
,然后在数组中每次出现时对该数字进行排序。
谢谢大家。
使用如下代码尝试插入排序..
void sort_min(int point[], int size_array)
{
int i, key, j;
for (i = 1; i < size_array; i++)
{
key = point[i];
j = i-1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && point[j] > key)
{
point[j+1] = point[j];
j = j-1;
}
point[j+1] = key;
}
}
如果你问这个,你需要像下面那样使用 size_array
。
您需要将 i
和 j
与 while
中的 size_array
进行比较。
while (i < size_array && point[i] != min_n) {
i++
}
需要在 while
之后检查 i
、j
的值。它们可能大于或等于 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;
我正在尝试对一组这样的数字进行排序:
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 这样的迭代函数for
or a while
(就是这个问题,怎么解?)。当然,我已经做到了,但是我得到了 Segmentation fault
之类的答案。
主要概念是寻找一个数字 int min_n
,然后在数组中每次出现时对该数字进行排序。
谢谢大家。
使用如下代码尝试插入排序..
void sort_min(int point[], int size_array)
{
int i, key, j;
for (i = 1; i < size_array; i++)
{
key = point[i];
j = i-1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && point[j] > key)
{
point[j+1] = point[j];
j = j-1;
}
point[j+1] = key;
}
}
如果你问这个,你需要像下面那样使用 size_array
。
您需要将
i
和j
与while
中的size_array
进行比较。while (i < size_array && point[i] != min_n) { i++ }
需要在
while
之后检查i
、j
的值。它们可能大于或等于 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;