我试图在for循环中使用此函数findMinimumIndex对数组进行排序,但我似乎无法找到它未正确排序的位置。有什么建议?函数本身工作正常,但是当我尝试在循环中使用它时,它不起作用。有什么建议?谢谢!
int findMinimumIndex(A[], int a, int b); //Finds smallest index of portion of array (A[i] ... A[j])
int main(){
int A[5] = {4,6,7,4,3};
int smallest_index;
for (int j = 0; j < count; j++){
smallest_index = findMinimumIndex(A, j, 4);
printf("Sorted: %d\n", A[smallest_index]);
}
}
int findMinimumIndex(int A[], int a, int b){
int smallest_value = A[a];
int index = 0;
for (int k = a; k < j - 1; k++){
if (A[k + 1] < smallest_value){
smallest_value = A[k+1];
index = k + 1;
}
}
return index;
}
答案 0 :(得分:2)
如果找到最小值及其索引,则应切换值:
看看这个例子:
你有阵列:
{4,6,7,4,3}
首先,您会在索引3
处找到值4
,但您必须移动最小值(在j=0
索引处切换值):
{3,6,7,4,4}
然后,您会在索引4
上找到3
,然后将其切换为j=1
:
{3,4,7,6,4}
等
修改代码:
for (int j = 0; j < count; j++){
smallest_index = findMinimumIndex(A, j, 4);
int tmp = A[smallest_index];
A[smallest_index] = A[j];
A[j] = tmp;
printf("Sorted: %d\n", A[j]);
}
编辑:更正:
数组的长度为5:
smallest_index = findMinimumIndex(A, j, 5);
和索引应设置为a
int findMinimumIndex(int A[], int a, int b){
int smallest_value = A[a];
int index = a;
/* code */
}