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

Сортировка массива символов используя алгоритм сортировки "вставками" и "быструю" сортировку - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ упаковка по ящикам http://www.cyberforum.ru/cpp-beginners/thread972594.html
здравствуйте, помогите пожалуйста с программой, которая будет упаковывать элементы в ящики (определенного размера) с минимальным занимаемым местом. например, последовательность элементов: 5,7,3,9,6,8,1,4,2,5 (например хранится в массиве а) Объем ящиков = 10 шаг 1. в 1 ящик кладется 5 (a)
C++ Подсчет символов в файле Дан текстовый файл, где в первой строке введено некоторое число N. Во второй строке находятся N элементов(чисел), введенных через пробелы. Помогите плиз написать прогу, которая может вывести номер символа, с которого начинается какой-нибудь m-тый элемент из этого введенного ряда. Помогите пожалуйста :) http://www.cyberforum.ru/cpp-beginners/thread972586.html
Как инит масс, передава указатель конструктору? C++
#include <iostream> #include <string> using namespace std; class swapall { private: int *a; double *b; string slovo;
Перепишите пожалуйста на C++ C++
procedure TForm1.Button1Click(Sender: TObject); var r5,x1,y1,x2,y2,x3,y3,x4,y4:integer; l,n,r4,r3,r1,r2:integer; begin x1:=200;y1:=200; x2:=200;y2:=50; x3:=50;y3:=50; r1:=Round(SQRt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); r2:=Round(SQRt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))); r3:=Round(SQrt(r2*r2+r1*r1));
C++ Реализовать через цикл for http://www.cyberforum.ru/cpp-beginners/thread972557.html
Дано вещественное число a, целое n. Вычислить: a (a-1) (a-2)...(a-n). Вот пишу, но цикл работает не верно... #include <iostream> #include <windows.h> #include <cmath> using namespace std; int main() {
C++ Даны положительные действительные числа a,b,c,d. Выяснить, можно ли один из прямоугольников целиком поместить внутри другого прямоугольника Прямоугольники. Даны положительные действительные числа a,b,c,d. Выяснить, можно ли один из прямоугольников целиком поместить внутри другого прямоугольника. Числа a , b определяют стороны первого прямоугольника , а c и d – стороны второго прямоугольника. нужно написать прогу в си++ подробнее

Показать сообщение отдельно
ozimandius
2 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 29
09.10.2013, 00:08     Сортировка массива символов используя алгоритм сортировки "вставками" и "быструю" сортировку
Доброго времени суток! Задача ставилась следующая : заполнить массив из 3000 элементов символами, отсортировать используя алгоритмы сортировки вставками и быстрой сортировки, и замерять время выполнения программы. Я попытался реализовать следующим образом:
Для сортировки вставками
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
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <time.h>
using namespace std;
#define _rand(min, max) ( rand() % ((max) - (min) + 1) + (min) )
int m, k;
void sort_vstavka(char *mas, int i, int j)
{
    int key;char var;
    for (i=0; i<3000; i++)
        {
            key=i+1;
            var=mas[key];
            for (j=i+1; j>=0; j--)
                {
                if (var<mas[j-1])
                    {
                        mas[j]=mas[j-1];
                        key=j-1;
                    }
                }
            mas[key]=var;
        }
 
    for (i=0; i<3000; i++){ cout<<mas[i]<<" ";}}
int main()
{
    setlocale(LC_ALL, "russian");
    srand(time(NULL));
    system("chcp 1251 >nul");
    char mas1[32]; 
 
    for(int i=224, n=0; i<=255; ++i, ++n)
    {
        mas1[n] = (char) i; 
    }
  cout << "\nСлучайным образом:\n";
    for(int m=0; m<3000; ++m)
    {
        mas1= mas1[_rand(0, 31)] << "\t";
    }
    m=0; k=3000-1;
    cout<<endl<<"Отсортированный:\n";
    sort_vstavka(mas1, m, k);
     cout << "Время выполнения = " << clock()/1000.0 << endl;
 return 0;
}
И для быстрой
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <time.h>
using namespace std;
#define _rand(min, max) ( rand() % ((max) - (min) + 1) + (min) )
int m, k;
void quicksort(char *mas, int i, int j)
{
    char c, x;
    m=i; k=j;
    c=mas[(m+k) / 2];
    do
        {
        while (mas[m]<c) m++;
        while (mas[k]>c) k--;
        if (m<=k)
            {
                x=mas[m];
                mas[m]=mas[k];
                mas[k]=x;
                m++;
                k--;
            }
        } while (m<k);
    if (i<k) quicksort(mas, i, k);
    if (m<j) quicksort(mas, m, j);
}
 
int main()
{
    setlocale(LC_ALL, "russian");
    srand(time(NULL));
    system("chcp 1251 >nul");
    char mas1[25]; 
 
    for(int i=97, n=0; i<=122; ++i, ++n)
    {
        mas1[n] = (char) i; 
    }
  cout << "\nСлучайным образом:\n";
    for(int m=0; m<3000; ++m)
    {
        mas1= mas1[_rand(0, 24)] << "\t";
        cout<<mas1<<"\t";
    }
    m=0; k=3000-1;
    cout<<endl<<"Отсортированный:\n";
    quicksort(mas1, m, k);
    for (m=0; m<3000; m++) cout<<mas1[m]<<" ";
        cout << "Время выполнения = " << clock()/1000.0 << endl; 
 return 0;
}
К сожалению, в обоих случаях работает только первая часть программы, то есть генерация случайных символов, а вот сортировка не работает.Просьба указать мне на мои ошибки и помочь привести код в рабочее состояние.Заранее спасибо!

Добавлено через 31 минуту
Ошибку нашёл невнимательность - моя беда всё сортируется, но в конце сортировки выдаёт "HEAP CORRUPTION DETECTED after Normal block.... CRT detected that the aplication wrote to memory after end of heap bufer"
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
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <time.h>
#include <ctime>
using namespace std;
#define _rand(min, max) ( rand() % ((max) - (min) + 1) + (min) )
int m, k;
void sort_vstavka(char *mas, int i, int j)
{
    int key;char var;
    for (i=0; i<300; i++)
        {
            key=i+1;
            var=mas[key];
            for (j=i+1; j>=0; j--)
                {
                if (var<mas[j-1])
                    {
                        mas[j]=mas[j-1];
                        key=j-1;
                    }
                }
            mas[key]=var;
        }
 
    for (i=0; i<300; i++){ cout<<mas[i]<<" ";}}
void main()
{
    setlocale(LC_ALL, "russian");
    srand(time(NULL));
    char *mas1=new char[25]; 
 
    for(int i=97, n=0; i<=122; ++i, ++n)
    {
        mas1[n] = (char) i; 
    }
  cout << "\nСлучайным образом:\n";
    for(int m=0; m<300; ++m)
    {
       mas1[m]= mas1[_rand(0, 24)] ;
       cout<<mas1[m]<<"\t";
    }
    m=0; k=300-1;
    cout<<endl<<"Отсортированный:\n";
    sort_vstavka(mas1, m, k);
    delete []mas1;
     cout << "Время выполнения = " << clock()/1000.0 << endl;
 
}
Хотя , вроде я удаляю массив из памяти после вызова функции.В чём тут дело?

Добавлено через 15 минут
Проблема решена! Прошу прощения за необоснованное открытие темы Надо было не спешить а самому всё внимательно пересмотреть
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru