В чем проблема с алгоритмом сортировки ниже? - PullRequest
0 голосов
/ 27 июня 2019
void main()
{
    int a[] = { 10, 3, 4, 2, 1, 0 };
    int i = 0;
    int temp_index;
    int temp_min;
    int temp;
    a[i];
    int j;
    a[j];
    int n = sizeof(a) / sizeof(int);
    for (; i < n - 1; i++)
    {
        int temp_min = i;
        int j = i + 1;
        for (; j < n; j++)
        {
            if (a[i] > a[j])
            {
                temp_min = j;
            }
        }

        int temp = a[temp_min];
        a[temp_min] = a[i];
        a[i] = temp;
    }

    int k = 0;

    for (; k < n; k++)
    {
        printf("%d", a[k]);
    }
}

Ответы [ 2 ]

1 голос
/ 27 июня 2019

вы сравниваете

if (a[i] > a[j]) {
    temp_min = j;
}

вместо if (a[temp_min] > a[j]) { ... }

0 голосов
/ 27 июня 2019

Выбор сортировки выбирает наименьшее число от [i] .. a [n-1] до i-й позиции. Для достижения этого вы можете изменить цикл for -

for (; i < n - 1; i++)
{
    int temp_min = a[i];
    int swapIndex=-1;
    int j = i + 1;
    for (; j < n; j++)
    {
        if (temp_min > a[j])
        {
            temp_min = a[j];
            swapIndex = j;
        }
    }
    if(swapIndex !=-1){
    a[swapIndex] = a[i];
    a[i] = temp_min;
    }

}

Также вы можетеизмените

 if (a[i] > a[j])
 {
            temp_min = j;
 }

часть в вашем коде на это -

if (a[temp_min] > a[j])
 {
     temp_min = j;
 }

это будет работать, но в этом случае -

int temp = a[temp_min];
a[temp_min] = a[i];
a[i] = temp;

Эта часть подкачки будетизбыточно для уже отсортированного массива, например {1,2,3,4}

...