Форум программистов, компьютерный форум CyberForum.ru

Сортировка вставками - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка. Переопределение параметров в функции http://www.cyberforum.ru/cpp-beginners/thread642702.html
Добрый вечер всем! Такая задача: Необходимо составить программу для систем счисления (от 2 до 36) пользователь вводит число в десятичной системе и вводит номер системы. например: число 350 в 8-ричной системе. Программу надо написать через функцию. Сначала я написал через обычную пустую функцию (одним куском кода)-ВСЁ ОТЛИЧНО РАБОТАЕТ. Необходимо написать так что бы сначала шол код...
C++ что означает данная строчка? &operator что это означает? (Tabl это класс) friend ofstream &operator << ( ofstream &outf, Tabl MyTabl ) я так понимаю объявляется дружественная функция перегрузки оператора ввода? можете еще объяснить что происходит ( ofstream &outf, Tabl MyTabl ) понимаю что создается объект класса Tabl но для чего? что значит ofstream &outf как это все взаимодействует? Заранее огромное Спасибо! http://www.cyberforum.ru/cpp-beginners/thread642696.html
Сравнение трех чисел ограниченными средствами C++
У Дейтела после первой главы, где рассматриваются основы процедурного программирования, есть небольшой блок задач для самостоятельного решения. Среди них - написать программу, запрашивающую у пользователя 3 не одинаковых целых числа, а после выдающей наибольшее и наименьшее из них ( чуть далее следует схожая задача на пять чисел). Пользоваться можно только изученным до этого материалом, а значит,...
Поиск анаграмм в словаре C++
Учу С++ по учебнику, там есть задача по написанию программы для поиска анаграмм(слов из одинаковых букв) и выводу их на экран. Столкнулся с проблемой: не выводится ничего. Судя по тому что при пошаговом прогоне отрицательно проверяется строка 30 проблема в вводе, но где именно я так и не понял :( #include <iostream> #include <vector> #include <fstream> #include <map> #include <algorithm>...
C++ Перейти из левого нижнего в правый верхний угол массива, двигаясь вверх либо вбок, суммируя элементы через которые идем. Сумма должна быть минимальной http://www.cyberforum.ru/cpp-beginners/thread642653.html
Помогите составить алгоритм реализации такой программы. Например, есть массив: 1 2 5 7 9 4 6 8 2 1 3 9 7 5 2 Cчитаем сумму для 3: + т.е 3+4 и записываем в массив 2. Потом + т.е 3+9 и тоже записываем в массив 2. То же проделываем для 4 и 9, 1 и 6 и 7 ну и т.д. Но это очень приблизительно. А составить нормальный алгоритм не получается.
C++ подпрограмма Всем привет я тут все выполнил задания, учитель сказал где то ошибка !! подскажите где косяк ? #include "stdafx.h" #include <iostream> #include <ctime> #include <iomanip> #include <stdio.h> #include <stdlib.h> подробнее

Показать сообщение отдельно
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
05.09.2012, 14:41     Сортировка вставками
ovli у тебя ошибка в первом цикле. i должна равняться 1.
вот пример работающего кода


Сортировка вставками
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream> 
using namespace std; 
 
void InterSort(int* array, int size)  
{  
    int temp; 
    int i, j; 
 
    for ( i = 1; i < size; i++)  
    { 
         temp = array[i]; 
         for ( j = i - 1; j >= 0 && array[j] > temp; --j) 
             array[j+1] = array[j];
             array[j+1] = temp; 
    } 
}
 
 
int main() 
{   
    setlocale(0, "rus");
    const int size = 10;
    int array[size] = { 12, 56, 7, 8, 11, 23, 45, 89, 54, 33 };  
    unsigned int i;
 
    cout << "Исходный массив " << endl;
    for ( i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl << endl;  
 
    InterSort(array, size);
    cout << "Отсортированный массив " << endl; 
 
    for ( i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl; 
}


теперь по самой сортировки

C++
1
2
3
4
5
6
7
8
9
10
int temp; 
    int i, j; 
 
    for ( i = 1; i < size; i++)  
    { 
         temp = array[i]; 
         for ( j = i - 1; j >= 0 && array[j] > temp; --j) 
             array[j+1] = array[j];
             array[j+1] = temp; 
    }
1. Элементу temp присваивается второй элемент в массиве
2. j на один меньше чем i в данном случае первый элемент
3 если j ,больше или равно 0 и первый элемент больше впереди стоящего они меняются местами

В общем сортировка начинается со второго элемента и элементы упорядочиваются с левой стороны от данной итерации цикла.
 
Текущее время: 09:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru