HimCha Ответов: 2

Я не понимаю, как работает этот вид вставки


#include<stdio.h>
void main()
{
int size,arr[100],i,k,j;
printf("Enter the number of elements\t");
scanf("%d",&size);
printf("\n Enter the elements of the array\n");
for(i=0;i<size;i++)
{
    scanf("%d",&arr[i]);
}
for(i=0;i<size;i++)
{
k=arr[i];
for(j=i-1;j>=0&&k<arr[j];j--)
arr[j+1]=arr[j];
arr[j+1]=k;
}
printf("\n Sorted list is :\n");
for(i=0;i<size;i++)
printf("%d\n",arr[i]);
printf("\n");
}


Что я уже пробовал:

for(i=0;i<size;i++)
{
    scanf("%d",&arr[i]);
}
for(i=0;i<size;i++)
{
k=arr[i];
for(j=i-1;j>=0&&k<arr[j];j--)
arr[j+1]=arr[j];
arr[j+1]=k;


как это работает?

HimCha

@PIEBALDconsult можете ли вы мне помочь с этим?

PIEBALDconsult

Это не очень хорошо работает.
https://en.wikipedia.org/wiki/Insertion_sort

HimCha

когда я запускаю его, он работает и сортируется.

2 Ответов

Рейтинг:
4

Patrice T

Прежде всего: научитесь правильно делать отступы в вашем коде, это покажет его структуру и поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.

#include<stdio.h>
void main()
{
  int size,arr[100],i,k,j;
  printf("Enter the number of elements\t");
  scanf("%d",&size);
  printf("\n Enter the elements of the array\n");
  for(i=0;i<size;i++)
  {
    scanf("%d",&arr[i]);
  }
  for(i=0;i<size;i++)
  {
    k=arr[i];
    for(j=i-1;j>=0&&k<arr[j];j--)
      arr[j+1]=arr[j];
    arr[j+1]=k;
  }
  printf("\n Sorted list is :\n");
  for(i=0;i<size;i++)
    printf("%d\n",arr[i]);
  printf("\n");
}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]
-----
Как сказал пегий эта статья объясняет как работает сортировка вставки:
https://en.wikipedia.org/wiki/Insertion_sort[^]
-----
Чтобы увидеть, как работает этот код, используйте отладчик и выполняйте шаг за шагом.
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


HimCha

Спасибо за Ваши советы. Я использую кодовые блоки.
И эта программа прекрасно работает, когда я ее запускаю. Я не понимаю, как это работает.

Patrice T

Мы не можем объяснить вам лучше, чем статья в Википедии.

HimCha

Спасибо

HimCha

Хорошо, я узнаю об отладке спасибо.

HimCha

Не могли бы вы подсказать мне, как научиться программировать? Это будет очень полезно.

Рейтинг:
16

Patrice T

Цитата:
Не могли бы вы подсказать мне, как научиться программировать? Это будет очень полезно.

Это уже другой вопрос.

Вот стандартный ответ:
Вы должны знать, что вы можете делать практически все на любом языке, просто некоторые языки сложнее для начинающих, потому что есть больше подводных камней, чтобы справиться.
Вам нужно овладеть набором техник, которые лежат в основе работы и не связаны с языком.

Советы:
- Начните с простого/безопасного языка: VB, Java, C#, а не C или C++
- Читайте документацию / следуйте учебникам (их очень много)
- Начните с крошечных/бесполезных проектов, цель которых-научиться программированию, а не делать что-то полезное.
- Начните с программ консольного режима (никакой причудливой графики, никакой мыши)
- Изучите отладчик
Отладчик - Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
- Проблема ? Google-ваш друг.
- Изучайте алгоритмы и структуры данных.
- Учить Булевой алгебры
- Изучите один или несколько методов анализа, У. Е. сверху вниз Djikstra способ это хорошее начало.
https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design[^]
https://en.wikipedia.org/wiki/Structured_programming[^]
https://en.wikipedia.org/wiki/Edsger_W._Dijkstra[^]
https://www.cs.utexas.edu/users/EWD/ewd03xx/EWD316.PDF[^]
- Изучайте SQL
- Изучите проектирование и Администрирование баз данных
Введение в проектирование баз данных[^]
1NF, 2NF, 3NF и BCNF в нормализации баз данных | учебник по СУБД | Studytonight[^]
- Изучайте Регулярные Выражения

Интересная ссылка:
Научитесь программировать[^]

Нет кратчайшего пути к знанию, никто не может учиться за вас, вы единственный, кто может это сделать.
Помните, что упражнения и маленькие проекты здесь не для того, чтобы сделать что-то полезное, они здесь, чтобы научить вас программированию.