HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 30.06.2007, 12:43
The_HuliGun
Участник форума
Регистрация: 19.05.2007
Сообщений: 228
Провел на форуме:
4325663

Репутация: 240
Отправить сообщение для The_HuliGun с помощью ICQ
По умолчанию

Ето алгоритм QuickSort, читай здесь
 
Ответить с цитированием

  #2  
Старый 30.06.2007, 16:32
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

никак не могу сделать этот квиксорт =\


вот чего я делаю:
1. задаю каким-то хреном середину массива (этот выбор наугад совсем мне не нравится, херня какая-то)
2. затем ищу слева число, больше или равное данному.
если не нашёл, то оно получается такое же как и в середине.
3. ищу слева меньшее данного. или опять же ему равное?
вот уже из-за этой херни я не вижу там логики.
сколько описаний в сети не прочёл - нигде не сказано точно.
примеров нормальных вообще нет.

сравнил два числа, (если они не равны друг другу), поменял местами.
затем снова ищу. и так наверно до тех пор пока они в любом случае не станут равны друг другу. (ну вот такие рассуждения хоть как-то упорядочивают мои мысли. сортируют их блин.)

потом в примере написано надо брать середину левой части. опять же наугад. какой идиот это писал?
и доводить всё до того, пока левая часть не станет равна одному элементу массива.
а что дальше?
и как всё это реализовать?

помогите, набросайте хоть какой-нить пример нормальный
 
Ответить с цитированием

  #3  
Старый 30.06.2007, 16:54
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

да уж, куда этому идиоту хоару до нас...
 
Ответить с цитированием

  #4  
Старый 30.06.2007, 17:15
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

:d
да не хоар идиот, а тот кто учебник писал. там таки и пишут - возьмём наугад.. чо за херня, как можно делать что-то наугад? в топку таких учителей
 
Ответить с цитированием

  #5  
Старый 30.06.2007, 17:24
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

наугад, потому что выбор элемента абсолютно никак не влияет на конечную эффективность.
зы наугад читай как произвольным образом.
 
Ответить с цитированием

  #6  
Старый 30.06.2007, 18:24
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

вот можно ли это дело изменить так чтобы функция работала только на указателях?


void quicksort(int *array, int start, int stop)
{
int left = start,
right = stop,
center = array[(start + stop) / 2];

while(left<right)
{
while(array[left]<center) left++;
while(array[right]>center) right--;
if(left<=right)
{
swap(&array[left], &array[right]);
left++;
right--;
}
}
if(right>start) quicksort(array, start, right);
if(left<stop) quicksort(array, left, stop);
}
 
Ответить с цитированием

  #7  
Старый 30.06.2007, 18:37
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

array[i] -> *(array+i)
&array[i] -> array+i
 
Ответить с цитированием

  #8  
Старый 01.07.2007, 09:38
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

задача: Функция находит в строке заданную подстроку и
возвращает динамический массив указателей на все вхождения этой подстроки.

так вот я не знаю, какой размер задать массиву? получается всякая чушь:

Код:
#include "stdio.h"
void strf(char s1[], char s2[], int pos=0)
{
	int n = sizeof(s1)/sizeof(s1[0]);
	int n2 = sizeof(s2)/sizeof(s2[0]);
	char *mass[20];
	for(int i=0; i<=n; i++)
	{
	if(s1[i] == s2[i])
	{
	int g=i;
	for(int l=i; l<=n2; l++)
		if(s1[l]!=s2[l])
		{
		int g=-1; break;
		}
	mass[i] = &s1[g];
	}
	}

}


void main()
{
	char s1[] = "Terriuckble Fucker Stuckpidly";
	char s2[] = "uck";
		strf(s1,s2);
}
 
Ответить с цитированием

  #9  
Старый 01.07.2007, 11:03
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

вот переделал сколько смог, но всё равно не работает собака серая!
я с массивом ms уже замучался. надо чтобы он был массивом указателей char *ms
и в него сохранялись указатели на первые вхождения подстроки в строку, т.е.
адреса на три буквы U, за которыми следуют буквы C и K.
В учебнике написано что для массивов указателей вообще не выделяется память, и как тогда быть?
Как наполнить массив указателями?
Постучитесь кто-нить в аську 268238560, объясните, иначе я на экзамен не попаду, очень нужен дельный совет!
По сути, могу даже яндекс деньгами рассчитаться за помощь, в разумных пределах конечно.

#include "stdio.h"


char * strf(char *s1, char *s2)
{
for (int m1=0;s1[m1]!='\0';m1++);
for (int m2=0;s2[m2]!='\0';m2++);

int ms[5];
int counter=0;
int ps=0;
for(int i=0;i<m1;i++)
{

if(s1[i] == s2[0])
{
int start = i;
for(int j=0;j<m2;j++)
{
if(s1[j+i] != s2[j])
ps = 1;
}

if(ps == 0)
ms[counter] = start;

}

}

return (int)ms[5];
}


void main()
{
char s1[] = "Terriuckble Fucker Stuckpidly";
char s2[] = "uck";


strf(&s1[0],&s2[0]);

for(int l=0;l<5;l++)
printf("%d \n", ms[l]);

}
 
Ответить с цитированием

  #10  
Старый 01.07.2007, 11:07
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

и ещё: где взять alloc.h? у меня в МС визуал си++ 6.0 его нет
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости. Обсуждения. 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ