如何在C中对数组进行排序

时间:2015-10-15 06:17:03

标签: c arrays sorting

我试图在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;

}

1 个答案:

答案 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 */
}