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

Поразрадная сортировка массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Начисление зарплаты преподавателям http://www.cyberforum.ru/cpp-beginners/thread359418.html
Вводить с клавиатуры и сохранять в массивах для каждого из 8 преподавателей колледжа - количество проведенных уроков и категорию ( первая, вторая или третья ). Начислить им зарплату за схемой: для...
C++ Метод класса возвращающий итератор Не могу заставить метод класса возвращать итератор, помогите понять почему компилятор не разрешает это сделать: Класс (методы возвращающие итераторы в самом низу) class Students { friend... http://www.cyberforum.ru/cpp-beginners/thread359412.html
Почему неверно писать #include <iostream.h>? C++
Добрый вечер. Очередной вопрос от чайника))) Вопрос такой. Почему надо писать #include <iostream>, а не #include <iostream.h>? Для такого кода: #include <iostream.h> #include <conio.h> using...
Вычислить и вывести на экран в виде таблицы значение функции C++
#include <stdio.h> #include <math.h> int main () {float x,b,a,c,F; printf ("vvedite x\n"); scanf ("%f",&x); printf ("vvedite a\n"); scanf ("%f",&a); printf ("vvedite b\n"); scanf ("%f",&b);
C++ Найти минимальный положительный элемент кратный 3м под побочной диагональю http://www.cyberforum.ru/cpp-beginners/thread359398.html
Дана матрица 12х12,найти минимальный положительный элемент кратный 3м,под побочной диагональю.Можно изменить размер,т.к. нужно заполнить массив в ручную.
C++ Не работает программа из книги Герберта Шилдта. При вводе кода из вышеупомянутой книги, выдает 3 ошибки: 1) error C2440: '=' : cannot convert from 'char ' to 'char' 2)error C2446: '<=' : no conversion from 'char *' to 'int' 3)error C2040:... подробнее

Показать сообщение отдельно
detor FAR
1 / 1 / 0
Регистрация: 24.11.2010
Сообщений: 28

Поразрадная сортировка массива - C++

02.10.2011, 17:15. Просмотров 299. Ответов 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
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include<stdio.h>
#include<conio.h>
#include <alloc.h>
#include<stdlib.h>
#include<time.h>
#include<dos.h>
int sravnenie=0;
int pricvoenie=0;
void respawn (int *arr,int *arrbuf,int n)
{
sravnenie=0;
pricvoenie=0;
for (int i=0;i<n;i++)
{
arrbuf[i]=arr[i];
}
}
int sravn(int a,int b)
{
sravnenie++;
if(a<b)return 1;
return 0;
}
void swap (int &a, int &b)
{
int tmp=a;
a=b;
b=tmp;
pricvoenie+=3;
}
 
 
void sortvstav(int *arr,int *arrbuf,int n)
{
respawn(arr,arrbuf,n);
 
for(int i=0;i<=n-1;i++)
{
int temp=arrbuf[i];
for(int j=i;j>0;j--)
{
if(sravn(arrbuf[j-1],temp)==0)
{
swap(arrbuf[j],arrbuf[j-1]);
}
else break;
}
swap(arrbuf[j],temp);
}
}
void sortpuz(int *arr,int *arrbuf,int n)
{
respawn(arr,arrbuf,n);
for (int j=1;j<n-1;j++)
{
for(int i=1;i<n;i++)
{
if(sravn(arrbuf[i-1],arrbuf[i])==0)
{
int temp=arrbuf[i];
swap(arrbuf[i],arrbuf[i-1]);
swap(arrbuf[i-1],temp);
}
}
}
}
 
 
void sortVibor(int *arr,int *arrbuf,int n)
{
respawn(arr,arrbuf,n);
for(int i=0;i<n;i++)
{
int min=i;
for(int j=i+1;j<n;j++)
if(sravn(arrbuf[j],arrbuf[min])==1)
min=j;
int temp=arrbuf[min];
swap(arrbuf[min],arrbuf[i]);
swap(arrbuf[i],temp);
}
}
 
 
void inputUp(int *arr,int n)
{
printf("Исходный массив заполненный по возрастанию");
for(int i=0;i<n;i++)
{
arr[i]=i;
printf("%d ",arr[i]);
}
getch();
}
void inputDown(int *arr,int n)
{
printf("Исходный массив заполненный по убыванию");
for(int i=0;i<n;i++)
{
arr[i]=n-i;
printf("%d ",arr[i]);
}
getch();
}
 
 
 
void inputRandom(int *arr,int n)
{
randomize();
printf("Исходный массив заполненный рандомно");
for(int i=0;i<n;i++)
{
arr[i]=random(100);
printf("%d ",arr[i]);
}
}
void print(int *arr,int n)
{
for(int i=0;i<n;i++)
printf("%d ",arr[i]);
}
 
 
int main(void)
{
clrscr();
int n,y;
int *arr,*arrbuf;
struct time t;
float start,stop;
printf("Введите размерность массива");
scanf("%d",&n);
arr=(int*)malloc(n*sizeof(int));
arrbuf=(int*)malloc(n*sizeof(int));
for(;
{
printf("\nМеню\n1.По возрастанию\n2.По убыванию\n3.Рандом\n (4)Сортировка-пузырьком\n (5)-вставками\n (6)-выбором\n7.Поразрядная\n8.Выход из проги\n");
scanf("%d",&y);
switch(y)
{
case 1: inputUp(arr,n);break;
case 2: inputDown(arr,n);break;
case 3: inputRandom(arr,n);break;
case 4:
{
printf("Исходный массив ");print(arr,n);
printf("\nОтсортированный: ");
gettime(&t);
start=t.ti_hund;
for(int s=0;s<5000;s++)
{
sortpuz(arr,arrbuf,n);
}
gettime(&t);
stop=t.ti_hund;
print(arrbuf,n);
printf("\n Kolihestvo sravnenii=%d\n Kol-vo pricvoenii=%d\n Vremay=%f",sravnenie,pricvoenie,(stop-start)/5000);
break;
}
 
case 5:
{
printf("Исходный массив ");print(arr,n);
printf("\nОтсортированный: ");
//time(&start);
gettime(&t);
start=t.ti_hund;
for(int s=0;s<5000;s++)
{
sortvstav(arr,arrbuf,n);
}
gettime(&t);
stop=t.ti_hund;
print(arrbuf,n);
printf("\n Kolihestvo sravnenii=%d\n Kol-vo pricvoenii=%d\n Vremay=%f",sravnenie,pricvoenie,(stop-start)/5000);
break;
}
 
case 6:
{
printf("Исходный массив ");print(arr,n);
printf("\nОтсортированный: ");
//time(&start);
gettime(&t);
start=t.ti_hund;
for(int s=0;s<5000;s++)
{
sortVibor(arr,arrbuf,n);
}
gettime(&t);
stop=t.ti_hund;
print(arrbuf,n);
printf("\n Kolihestvo sravnenii=%d\n Kol-vo pricvoenii=%d\n Vremay=%f",sravnenie,pricvoenie,(stop-start)/5000);
break;
}
case 7:break; 
 
case 8:return 0;
}
}
getch();
return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru