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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
artproo
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 18
#1

первое число мусор при сортировке второй функцией - C++

14.10.2012, 13:23. Просмотров 245. Ответов 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;
void sort_in(int *A,int N,int &sr, int &per)
{
    int i, j;
    int x;
    for (i=1;i<N;i++)
    {
        x=A[i];
        for (j=i-1; (j>=0) && (A[j]>x); j-- )
        A[j+1]=A[j];
        A[j+1]=x;
    }
    return;
}
 
void quick(int *A, int N)  //быстрая сортировка, возможно не учтены аргументы
{   int i=0, j=N;
    int temp, p;
 
    p = A[ N>>1 ];      // центральный элемент
 
  // процедура разделения
  do {
    while ( A[i] < p ) i++;
    while ( A[j] > p ) j--;
 
    if (i <= j) {
      temp = A[i]; A[i] = A[j]; A[j] = temp;
      i++; j--;
    }
  } while ( i<=j );
 
 
  // рекурсивные вызовы, если есть, что сортировать 
  if ( j > 0 ) quick(A, j);
  if ( N > i ) quick(A+i, N-i);
    
    return;
}
 
int main (void)
{
    ofstream fout ("result.txt",ios::out);
    int rezhim;
    int N,up,s;
    int *A,i;
    int sr,per;
    int t;
    int sp;
    srand ((unsigned)time(NULL));
    setlocale (NULL,"rus");
    rezhim=9;
    int step;
    while (rezhim)
    {
        system("cls");
        cout<<"Выберите режим: \n";
        cout<<"1. Сортировка одного массива\n";
        cout<<"2. Обработка статистических данных\n";
        cout<<"0. Выход\n";
        cin>>rezhim;
        if (rezhim==1)
        {
            cout<<"Введите размер массива: ";
            cin>>N;
            cout<<"Введите диапазон случайных значений: ";
            cin>>up;
            cout<<"Выберите режим сортировки: \n";
            cout<<"1. Сортировка простым выбором\n";
            cout<<"2. Быстрая сортировка\n";
            cin>>s;
            A=new int [N];
            for (i=0;i<N;i++)
                A[i]=rand()%up;
            t=clock();
            if (s==1)
                sort_in(A,N,sr,per);
            else
                quick(A,N);
            t-=clock();
            t=-t;
            for (i=0;i<N;i++)
                fout<<A[i]<<" ";
            fout<<endl;
            fout<<"Размер массива: "<<N<<endl;
            fout<<"Заданный диапозон: "<<up<<endl;
            fout<<"time: "<<t<<endl;
        }
        else if (rezhim==2)
        {
            cout<<"Введите способ формирования элементов: \n";
            cout<<"1. Случайно\n";
            cout<<"2. По возрастанию\n";
            cout<<"3. По убыванию\n";
            cin>>sp;
            cout<<"Задайте диапазон и шаг изменения размеров: ";
            cin>>up>>step;
            cout<<"Выберите режим сортировки: \n";
            cout<<"1. Сортировка простым выбором\n";
            cout<<"2. Быстрая сортировка\n";
            cin>>s;
            if (s==1)
                fout<<"Сортировка простым выбором!\n";
            else
                fout<<"Быстрая сортировка!\n";
            for (N=step;N<=up;N+=step)
            {
                A=new int [N];
                switch (sp)
                {
                case 1:
                    for (i=0;i<N;i++)
                        A[i]=rand()%up;
                    t=clock();
                    if (s==1)
                        sort_in(A,N,sr,per);
                    else
                        quick(A,N);
                    t-=clock();
                    t=-t;
                    fout<<"kol: "<<N<<", time: "<<t<<endl;
                    break;
                case 2:
                    for (i=0;i<N;i++)
                        A[i]=i+1;
                    t=clock();
                    if (s==1)
                        sort_in(A,N,sr,per);
                    else
                        quick(A,N);
                    t-=clock();
                    t=-t;
                    fout<<"kol: "<<N<<", time: "<<t<<endl;
                    break;
                default:
                    for (i=0;i<N;i++)
                        A[i]=N+1-i;
                    t=clock();
                    if (s==1)
                        sort_in(A,N,sr,per);
                    else
                        quick(A,N);
                    t-=clock();
                    t=-t;
                    fout<<"kol: "<<N<<", time: "<<t<<endl;
                }
            }
        }
    }
    
    /////////
    //delete []A;
    //A=0;
 
    delete []A;
    A=0;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 13:23     первое число мусор при сортировке второй функцией
Посмотрите здесь:

Почему программа выдает мусор при сортировке извлечением? - C++
Почему выдает мусор при сортировке извлечением(типо -84554515 и похожие числа),остальные нормально работают #include &lt;stdio.h&gt; ...

Если первое число окажется четным, а второе при этом кратным 5, то вывести на печать их частное - C++
3. Даны два числа А и В. Если первое число окажется четным, а второе при этом кратным 5, то вывести на печать их частное. В противном...

Приписать первое слово второй строки к первой - C++
Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать первое слово второй строки к первой. Получить из измененной первой...

Введенное число делить на второе введенное число пока первое число не станет равным нулю - C++
Введенное число делить на второе введенное число пока первое число не станет равным int number=0; int secondNum=0; int...

Длинное число мешает сортировке массива - C++
1) задается массив 7*7 2) после сортировки первого столбца функцией: int sort1(int A, int i, int j) { int p, k, t; for (p=i-1;...

При добавлении студента, сбивается вся структура, и при выводе всего списка студентов, выводит какой то мусор - C++
Суть действий: При добавлении студента, сбивается вся структура, и при выводе всего списка студентов, выводит какой то мусор. Раньше я...

Умножить каждое число на первое отрицательное число. Добавив к каждому числу половину последнего отрицательного числа - C++
Здравствуйте! подскажите как реализовать на си++ &quot;Умножить каждое число на первое отрицательное число. Добавив к каждому числу половину...

Если первое число окажется кратным 5 или второе число будет нечетным, то вывести на экран сумму их модулей - C++
4. Даны два числа N и М. Если первое число окажется кратным 5 или второе число будет нечетным, то вывести на экран сумму модулей заданных...

Мусор при компиляции - C++
Только начал работать с классами, и на первом же примере застрял. Посмотрите пожалуйста, в чем ошибка? //заголовочный файл class.h ...

Мусор при выводе - C++
Динамически выделил память под массив, записал туда значения, при выводе он выводит элементов больше чем я выделял, как исправить? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 14:44     первое число мусор при сортировке второй функцией #2

Не по теме:

В quicksort обычно передаётся три аргумента: массив + два индекса: откуда и докуда сортировать. У вас же криво вычисляется центральный элемент и криво выполняется разделение из-за того, что индекс "откуда" всегда равен (точнее, подразумевается равным) нулю.

Disregard that. Я криво прочитал.

Кажется, тут где-то ошибка на единицу. j = N - 1 в самом начале. А то нехорошо, что индекс указывает за последний элемент.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru