@MrChen

Почему не работает алгоритм сортировки вставкой на c++?

Всем привет! Я начал читать Кормена Алгоритмы. Первый алгоритм, который я решил попробовать реализовать, это сортировка вставками.... Вот псевдокод:a1481b32b6f540e18e0d29f3ffb425fd.png

Вот код, который я написал на c++:
#include <iostream>

using namespace std;

int main() {
	int m[6] = {5, 2, 4, 6, 1, 3};
	int key = 0;
	int i = 0;

	int length = sizeof(m) / sizeof(int);

	for(int j = 2; j <= length; j++) {
		key = m[j];

		i = j - 1;
		
		while(i > 0 && m[j] > 0) {
			m[i + 1] = m[j];
			i = i - 1;
		}

		m[i + 1] = key;
	}
}


Но он почему то не сортирует массив. Подскажите, почему?
  • Вопрос задан
  • 293 просмотра
Решения вопроса 1
Индексация с Си начинается с 0, а не с 1, как во многих примерах реализации алгоритмов. Соответственно, если видим A[t], то в Си это переносим, как A[t-1]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Redproxima
Студент технического ВВУЗ'а
5a92f8b1af067174789070.pngСильно надеюсь, что мой пример кому-нибудь поможет. Тот же учебник, та же задача. Пример на языке Си. Если есть ошибки или кто-то может дать рекомендацию по оптимизации алгоритма - жду комментариев.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int j;
    int key;
    int n;
    printf("Enter N; N - the size of Array\n");
    scanf("%d", &n);
    int A[n];

    for(i=0; i<=n-1; i++){
        printf("Enter A[%d] = ",i);
        scanf("%d", &A[i]);
    }
    for(j=1; j<=n-1; ++j){
        key = A[j];
        i=j-1;

        while(i>=0 && A[i]>key){
            A[i+1]=A[i];
            i=i-1;
        }
    A[i+1]=key;
    }
    for(i=0; i<=n-1; i++){
        printf("%d\ ", A[i]);

}
return 0;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы