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

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

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

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

14.10.2012, 13:23. Просмотров 259. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 13:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос первое число мусор при сортировке второй функцией (C++):

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

Дано трёхзначное число.Найти число полученное при перестановке первой и второй цифр заданного числа. - C++
Дано трёхзначное число.Найти число полученное при перестановке первой и второй цифр заданного числа.

Дано трехзначное число.Найти число,полученное при перестановке первой и второй цифт заданного числа. - C++
Вот друг ещё дал 3 задачи.Т.к У него задолжности эти 3 задача: Дано трехзначное число.Найти число,полученное при перестановке первой...

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

Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число - C++
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число.

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

1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 14:44 #2

Не по теме:

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

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

Кажется, тут где-то ошибка на единицу. j = N - 1 в самом начале. А то нехорошо, что индекс указывает за последний элемент.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 14:44
Привет! Вот еще темы с ответами:

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

Дано вещественное число А>0. Найти среди чисел 1, 1+1/2, 1+1/3,… первое число, большее А - C++
Дано вещественное число А&gt;0. Найти среди чисел 1, 1+1/2, 1+1/3,… первое число, большее А

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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