![]() |
|
![]() ![]() ![]() |
|
Thetik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.4.2006 Репутация: -1 Всего: нет |
Я к вам за помощью... Понимаете, мне нужно посчитать колличество сравнений при сортировке массива из N чисел (N=50, 100, 150, ..., 1000) методом пузырька и пирамидальной сортировкой. Программа-то работает, только мне казалось, что пузырьком должно получиться больше, причем чем больше N, тем больше разница, а у меня получается почти одинаково и пирамидой даже немножко больше. Я понимаю, что где-то есть ошибка, но вот где она никак понять не могу, может подскажете! Вот текст программы:
Добавлено @ 01:28 #include <iostream.h> #include <math.h> #include <conio.h> int pusir(double*k,int m) { int kolvo=0; int n; double r; bool flag; n=m; flag=true; while(flag==true) { flag=false; n--; for(int i=0;i<n;i++){ if(k[i]>k[i+1]) {r=k[i+1]; k[i+1]=k[i]; k[i]=r; flag=true; } kolvo++; } } return(kolvo); } //------------------------------------------------------------- int piramida(double*x,int n) {int kolvo1=0; int child; int i; double tmp, u, d; //---построение пирамиды при k=0 и просеевание через пирамиду последних N/2 элементов при k!=0 for(int k=0;k<n/2;k++){ if(k!=0){ d=x[n-k-1]; for(i=(n-k-1);i>=0;i--){ x[i]=x[i-1]; } x[0]=d; } for(i=0;i <= n/2;i++) { tmp = x[i]; child = 2*i+1; // Левый ребенок элемента k /* выбираем большего ребенка элемента k из 2-х: либо левый, либо правый */ if (child<n && x[child] < x[child + 1]){ u=x[child]; x[child]=x[child+1]; x[child+1]=u; } kolvo1++; /* Если родитель x[k] больше всех своих детей, то ничего не делаем, он стоит на правильном месте */ if(tmp >= x[child]){ kolvo1++; continue; }else{kolvo1++; x[i] = x[child]; x[child] = tmp; } if (x[child] < x[child + 1]){ u=x[child]; x[child]=x[child+1]; x[child+1]=u; } kolvo1++; } } return(kolvo1); } //----------------------------------------------------------------- void main() {int N=0; int kolpus;// колличествово сравнений методом пузырька int kolpir;// колличество сравнений методом пирамиды double*x; for(int w=0; w<20; w++){ N+=50; randomize(); x= new double[N]; for(int i=0; i<N; i++) { x[i]=double(random(1000))/1000.; } //копия первоначального массива------------------------------ double*x1; x1= new double[N]; for(int i=0; i<N; i++) x1[i]=x[i]; cout<<"\n Pri N = "<<N; kolpus=pusir(x,N); cout<<"\n Kolichestvo sravnenii metodom pusirka = "<<kolpus; kolpir=piramida(x1,N); cout<<"\n Kolichestvo sravnenii metodom piramida = "<<kolpir<<"\n"; } getch(); } //--------------------------------------------------------------------------- |
|||
|
||||
Droll |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 10.11.2004 Репутация: нет Всего: 3 |
Порыскал я немного по Internet с помощью Яndex, нашел реализации обоих алгоритмов на C++, заменил в Вашем коде и получил такие вот значения:
Т.о., если сравнить с изначальными значениями, то можно сделать вывод, что у Вас неверно реализован алгоритм сортировки пирамидальным методом. В итоге у меня получился вот этот код:
Т.к. у меня не установлен Borland C++ Builder, а стоит GCC, то программа была нескольо доделана под него. Как мне кажется, проблем у Вас с этим появляться не должно, т.к. эти изменения касаются, в основном, функций генератора случайных чисел, которые находятся в функции int Main() - т.к. я ее почти не трогал, то Вы можете оставить эту функцию такой, какой она была до моего вмешательства. Удачи! |
||||
|
|||||
Thetik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.4.2006 Репутация: -1 Всего: нет |
Спасибо ОГРОМНОЕ!!!!!!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |