|
|
|
| Помощь нужна срочно, пожалуйста!!!вот код программы! нужно вставить счетчик!
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include<conio.h>
#include<iostream.h>
//сортировка вставками
void insert (int n, int x[])
{
int i, j, t;
for (i=0; i<n; i++)
{
t = x[i];
for (j=i-1; j>=0 && x[j]>t; j--)
{
x[j+1]=x[j];
}
x[j+1]=t;
}
}
int main()
{
int x[]= {4, 8,2,84,12,1};
int n=6;
insert(n, x);
for(int t = 0; t < n; t++)
{
cout << x[t] << " ";
}
getch ();
return 0;
} | |
|
|
|
|
|
|
|
для: Luxury31
(21.12.2008 в 15:46)
| | непонятно что хотите посчитать,
если колличество итераций вложенного цикла в функции insert() ,
то как-то так наверное
#ifdef __BORLANDC__
#pragma argsused
#endif
#include <iostream.h>
#include <conio.h>
using namespace std;
int insert (int n, int x[])
{
int i, j, t, counter = 0;
for (i=0; i<n; i++)
{
t = x[i];
counter += i;
for (j=i-1; j>=0 && x[j]>t; j--)
{
x[j+1]=x[j];
}
x[j+1]=t;
}
return counter;
}
int main()
{
int x[]= {4, 8,2,84,12,1};
int n=6;
cout << insert(n, x)<<" итераций" << endl;
for(int t = 0; t < n; t++)
{
cout << x[t] << " ";
}
getch();
return 0;
} |
| |
|
|
|
|
|
|
|
для: EXP
(21.12.2008 в 18:05)
| | вообщето кажется тожесамое что и просто написать
cout << ((n*n)-n)/2 <<" итераций" << endl; | |
|
|
|
|
|
|
|
для: exp
(21.12.2008 в 18:39)
| | Спасибо что Вы откликнулись на мой призыв о помощи!
Мне надо в самом коде прописать:
1) Общее число проходов цикла
2) Общее число операций сравнений
3) Общее число операций сдвигов | |
|
|
|
|
 830 байт |
|
|
для: Luxury31
(21.12.2008 в 18:44)
| | не очень понимаю задачку :)
например если всего раз прохождения могло-бы быть 'counter',
но на самом деле их 'zamen' удачных
и как при этом посчитать сколько всего сравнений вместе с удачными можно померить как 'vs' в цикле
или я ещё чегоито не соображу ;)
| |
|
|
|
|
|
|
|
для: exp
(21.12.2008 в 19:53)
| | #include <iostream.h>
#include <conio.h>
using namespace std;
int insert (int n, int x[])
{
int i, j, t, counter = 0, zamen = 0, vs=0;
for (i=0; i<n; i++)
{
t = x[i];
counter += i; // были-бы сравнения пока i>0
// операций сравнения думаю будет в counter и ((n*n)-n)/2 одинаково
for (j=i-1; j>=0 && vs++ /* vs */ && x[j]>t; j--)
{
x[j+1]=x[j];
// колличество замен надо считать здесь наверное
zamen++;
}
x[j+1]=t;
}
cout << vs <<" vsego sravnenij" << endl;
return zamen;
}
int main()
{
int x[]= {4, 8,2,84,12,1};
int n=6;
cout << ((n*n)-n)/2 <<" obwee 4islo prohodov cikla" << endl; // число проходов цикла
cout << insert(n, x)<<" Obwee 4islo sdvigov " << endl; //странно но тут считается именно это
for(int t = 0; t < n; t++)
{
cout << x[t] << " ";
}
getch();
return 0;
} |
| |
|
|
|
|
|
|
|
для: Luxury31
(21.12.2008 в 20:14)
| | я потом подумал, может такое имелось ввиду :)
#include <iostream.h>
#include <conio.h>
using namespace std;
void insert (int n, int x[])
{
int i, j, t, dv = 0, p = 0, vs=0;
// vs - сравнений
// p - прохождений наверное (цикл выполнился хоть один раз)
// dv - сдвигов
for (i=0; i<n; i++) {
t = x[i];
for (j=i-1; j>=0 && vs++ /*vs*/ && x[j]>t; j--) {
x[j+1]=x[j];
dv++; /* dv */
}
x[j+1]=t;
if (i!=j+1) p++; /* p */
}
cout << vs <<" vs" << endl;
cout << dv <<" dv" << endl;
cout << p <<" p" << endl;
}
int main() {
int x[]= {4, 8,2,84,12,1};
int n=6;
insert(n, x);
for(int t = 0; t < n; t++) {
cout << x[t] << " ";
}
getch();
return 0;
} |
| |
|
|
|
|
|
|
|
для: EXP
(21.12.2008 в 20:47)
| | // p - прохождений наверное (цикл выполнился хоть один раз) | вот тут мне надо что бы просчитывалось это действие ((n*n)-n)/2 | |
|
|
|
|
|
|
|
для: EXP
(21.12.2008 в 20:47)
| | cout << p <<" p" << endl; | могу ли я тут заменить << p << на << ((n*n)-n)/2 << | |
|
|
|
|
|
|
|
для: Luxury31
(21.12.2008 в 20:56)
| | это разные величины
((n*n)-n)/2 величина постоянная, зависящая только от размера массива
а количество выполнений хотябы по одному разу вложенного цикла
зависит от структуры входящего массива и от того насколько нужно его пересортировать
можно просто упростить так код написав
if (i != j+1 && p++) x[j+1] = t;
так как и vs++ в for p++ всегда будет больше нуля и присвоение будет выполняться только когда необходимо.
Но я так и не понял эта-ли цифра нужна :) фактически это важная цифра могущая получиться только при выполнении, и олзначает сколько-же раз пришлось гонять внутренний цикл
а колличество возможных в самом худшем случае итераций внутреннего цикла думаю ненужно
, внешнего оно тоже постоянная равная размеру массива | |
|
|
|
|
|
|
|
для: Luxury31
(21.12.2008 в 20:56)
| | _ | |
|
|
|
|
|
|
|
для: EXP
(21.12.2008 в 20:47)
| | сможещь помочь в этой задаче тоже нужны счетчики такие же как и в первой?Вот код:
#include <iostream>
#include <algorithm>
#include <conio.h>
using namespace std;
const size_t MAX = 5;
void printArray(int arr[])
{
for(size_t i = 0; i < MAX; ++i)
{
cout << arr[i] << endl;
}
}
void bubbleSort(int arr[])
{
size_t i, j;
for(i = 1; i < MAX; ++i)
for(j = 0; j < MAX - i; ++j)
if (arr[j] > arr[j+1])
{
swap(arr[j], arr[j+1]);
}
}
int main()
{
int arr[MAX];
for (size_t i = 0; i < MAX; ++i)
{
cout << "Vvedite element: " << endl;
cin >> arr[i];
}
printArray(arr);
bubbleSort(arr);
cout << "Posle sortirovki: " << endl;
printArray(arr);
getch ();
return 0;
} |
| |
|
|
|
|
|
|
|
для: Luxury31
(21.12.2008 в 21:56)
| | здесь нечего измерить :)
void printArray(int arr[]) {
for(size_t i = 0; i < MAX; ++i) {
cout << " "<< arr[i] ;
}
cout << endl<< "\t\xcd\xcd\xcd\xcd\xcd\n";
}// здесь менял чисто для красоты )
void bubbleSort(int arr[])
{
size_t i, j, call_of_swap = 0, iters=0;
for(i = 1; i < MAX; ++i) {
for(j = 0; j < MAX - i; ++j) {
if (arr[j] > arr[j+1])
{
swap(arr[j], arr[j+1]);
call_of_swap++;
}
iters++;
}
}
cout << "swap() calling "<< call_of_swap <<"times"<<endl;
cout << "summary "<< iters <<" comparings :)"<<endl;
}
|
вторая цифра тоже будет постоянной типа той формулы , но в правильности формулы не сильно уверен | |
|
|
|
|
|
|
|
для: exp
(21.12.2008 в 23:33)
| | По сути в этом коде тоже должен стоять счеткик сдвигов и сравнений( вот только у меня это не получается сделать | |
|
|
|
|
 1.5 Кб |
|
|
для: Luxury31
(21.12.2008 в 23:55)
| | Или я что-то упустил , или эта insert() делает ошибки , в частности с массивом из трёх элементов
попробовал сделать всё одними и теми-же функциями и посчитать перезаписи елементов и проверки
//upd
возможно неправильно применил эти delete () и new(), но не нашёл как это делать правильно | |
|
|
|
|
|
|
|
для: exp
(22.12.2008 в 04:50)
| | или показалось :)
#include <iostream>
using namespace std;
const size_t MAX = 20;
void printArray(int *arr, size_t max) {
for(size_t i = 0; i < max; ++i) {
cout << " "<< arr[i] ;
}
cout << endl;
} // printArray
void bubbleSort(int arr[], size_t max) {
size_t i, j;
int t;
size_t mov=0, vs=0;
for(i = 1; i < max; ++i) {
for(j = 0; j < max - i; ++j) {
if (arr[j] > arr[j+1]) {
t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t;
mov+=3;
} vs++;
}
}
cout<< "\n\tbubbleSort: vs = "<< vs <<"; mov = "<< mov <<";\n";
printArray(arr, max);
} // bubbleSort
void insert (size_t n, int x[])
{
int j, t;
size_t i, mov=0, vs=0;
for (i=0; i<n; i++)
{
t = x[i];
mov++;
for (j=i-1; j>=0 && ( ++vs ) && x[j]>t; j--)
{
x[j+1] = x[j];
mov++;
}
if ((int)i != (j=j+1) && (mov++)) x[j]=t;
}
cout<< "\n\tinsert: vs = "<< vs <<"; mov = "<< mov <<";\n";
printArray(x, n);
}
int main() {
size_t emax=1, i;
while(1) {
while(1) {
cout<<"Enter the number of elements (2-"<< MAX <<") or 0 for exit: ";
cin>>emax;
if (!emax) return 0;
if (emax>1 && emax <= MAX) break;
}
int *arr = new int[emax];
int *aOut = new int[emax];
cout <<"\n\nEnter the elements now :\n\t";
for (i = 0; i < emax; i++) cin>>arr[i];
/* копирование */
for (i = 0; i < emax; i++) aOut[i] = arr[i];
bubbleSort(aOut, emax);
insert(emax, arr);
delete arr;
delete aOut;
}
} | но всёравно не пойму как сравнить точнее, в insert во временную t = x[i]; записывается иногда лишний раз, но если не записывать это ещё одно сравнение.
и со всякими i, j .. - тоже операции производятся | |
|
|
|
|
|
|
|
для: EXP
(22.12.2008 в 12:18)
| | похоже просто)
delete[] arr;
delete[] aOut;
нашёл что в BuilderX есть кнопка Help :) | |
|
|
|
|
|
|
|
для: exp
(22.12.2008 в 14:43)
| | >нашёл что в BuilderX есть кнопка Help :)......Хочешь сказать раньше не замечал?)) | |
|
|
|
|
|
|
|
для: EXP
(22.12.2008 в 12:18)
| | Еще раз спасибо за помощь!Сегодня сдала,препод даже ничего и против не сказала!В общем ей понравилось!))) | |
|
|
|