Связные списки. Пузырьковая сортировка.

Эта страница появилась по просьбе одного из читателей этого сайта. Грамотно объяснить тему я не смогу, и любые мои объяснения могут запутать мысли читателей. Я не хочу навредить или направить мышление в неправильном направлении, поэтому эта страница содержит демонстрационный пример пузырьковой сортировки связного списка.

Одно знаю точно, чтобы научиться выполнять сортировку списка , для начала надо хорошо изучить сортировку на самых обычных массивах. Поймешь принцип — многие вопросы отпадут сами собой.

    Описание создания списка:

  • Двусвязный список
    • Исходный код Visual Studio Express 2012 Пузырьковая сортировка связного списка

Всё, что я могу пояснить, это то, что для сортировки был добавлен один единственный метод и вот его содержимое имеет смысл понять.
Сама перестановка элементов выполняется по значению. Здесь переставляются не звенья, а элементы звеньев и поэтому для каждого информационного элемента из текущего звена нужно будет описывать перестановку.

Похожие темы:

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

6 комментариев: Связные списки. Пузырьковая сортировка.

  • Gev говорит:

    спасибо

  • nomto говорит:

    Спасибо

    а как удалять элементы?

  • Hayk Grigoryan говорит:

    rebyat v std::list ispolzuetsya «Merge sort» a ne «Buble sort (v perevode s angl — puzirkovaya sortirovka) »  tak chto etot primer ochen’ ploxoy ne kogda ne sortiruyte spiski takim obvrazom, eto bezgramotno

  • kovalyovalekc говорит:

    Здравствуй, друг. Нужен твой совет, всего 2,5 маленьких вопроса.

    1) На 25 строке написано просто while(Head), а на 39 и 57 — if (Head!=NULL) и while (temp!=NULL) соответственно. В двух последних случаях мы можем написать также, как и в первом? Если нет, то почему?

    2)Второй вопрос связан с сортировкой: когда алгоритм обнаруживает, что значение одного элемента больше значения другого, то он меняет значения этих указателей:

    if( node->x > node2->x ){
    int i = node->x;
    node->x = node2->x;
    node2->x = i;}

    Будет ли корректным менять последовательность сами указатели?
    if (n1->data > n2->data) {
    Node *i = node;
    node = node2;
    node2 = i;}

    Кстати, обязательная ли 36 строка? Как ты думаешь?

    • admin говорит:

      25-я строка.
      Нет обхода списка, поэтому сразу циклом происходит обход всего списка, чтобы позвенно (по звеньям) удалить элементы списка.

      if поспособствует удалению только одного указателя, а надо удалять столько указателей, сколько в список добавлено было.
      ========================
      39-я строка.
      Это просто проверка на пустоту списка, мало ли добавление не получилось, не создавать же новое звено. Цикл тут не нужен, достаточно проверит ифом.
      =======================
      57 строка
      Это обход цикла. Нужно множество звеньев, поэтому цикл, одним ифом не обойтись.
      =======================
      Head — это начало списка, если написать while(head) — то это то же, что написать while (head == true), так можно повесить программу, если head Не указывает вникуда, то будет бесконечный цикл.
      =======================
      36-я, думаю, обязательна, но могу ошибиться.
      =======================

      Последний вопрос. Можно проверить самому ведь. Это неправильно.

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

вакансия "Программист Психологической службы" - Алё! у нас ошибко! не работает тра-ля-ля - Вы хотите об этом поговорить? )))

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок