Программа для вставки сортировки в C, она не сравнивает несортированный элемент со всеми предыдущими отсортированными элементами - PullRequest
1 голос
/ 05 мая 2019

Итак, я сделал эту программу, используя только for петли. Я просто пытался увидеть, что произойдет, если я использую for вместо while, но цикл работает только для сравнения одного отсортированного и несортированного элемента, а не отсортированных элементов до него.

#include <stdio.h>

void insertion(int arr[], int y) {
    int h, z, temp, x;
    for (z = 1; z <= y; z++) {
        for (x = z - 1; x >= 0; x--) {
            if (arr[x] >= arr[z]) {
                temp = arr[z];
                arr[z] = arr[x];
                arr[x] = temp;
            }
        }
    }
    for (h = 0; h < y; h++) {
        printf("\n %d", arr[h]);
    }
}

void main() {
    int arr[50];
    int x;
    printf("Enter the numbers of elemnts");
    scanf("%d", &x);
    printf("Enter the elements");
    for (int z = 0; z < x; z++)
        scanf("%d", &arr[z]);
    insertion(arr, x);
}

1 Ответ

1 голос
/ 05 мая 2019

Я думаю, что у вас есть ошибки off-by-1 и сравнение с неправильным элементом (по сравнению с:

i ← 1
while i < length(A)
    j ← i
    while j > 0 and A[j-1] > A[j]
        swap A[j] and A[j-1]
        j ← j - 1
    end while
    i ← i + 1
end while

из: https://en.wikipedia.org/wiki/Insertion_sort#Algorithm)

Попробуйте следующее:

#include<stdio.h>
void insertion (int arr[],int y)
{
    int h,z,temp,x;
    for(z = 1; z < y; z++)
    {
        for(x=z; x > 0 && arr[x-1] > arr[x]; x--)
        {
            temp=arr[x];
            arr[x]=arr[x-1];
            arr[x-1]=temp;
        }
    }
    for(h=0;h<y;h++)
    {
        printf("\n %d",arr[h]);
    }
}
void main()
{
    int arr[50];
    int x;
    printf("Enter the numbers of elemnts: ");
    scanf("%d",&x);
    printf("Enter the elements\n");
    for(int z=0;z<x;z++)
        scanf("%d",&arr[z]);
    insertion(arr,x);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...