• Авторизация


Вот сюда 16-05-2007 20:44 к комментариям - к полной версии - понравилось!


Исходник копипасть
вверх^ к полной версии понравилось! в evernote
Комментарии (5):
solnichny-zay 16-05-2007-20:56 удалить
Копипастю...


#include "TXLib.h"
#include

int* LastToFirst (int array[], int size, int what, int where, int from);
int Find (int array [], int s, int size);
int* Make_1 (int array[], int size);
int* Make_2 (int array[], int size);
int* Make_3 (int array[], int size);
int Change (int array [], int left, int right, int x);
void Sort (int array[], int left, int right);
int* Change_1 (int array [], int size, int x);

int main ()
{
txCreateWindow (600, 600);
int array1 [11] = {1, 3, 4, 6, 7, 9, 12, 15, 17, 20};
int array2 [10] = {15, 27, 104, 5, 40, 1, 4, 0, 8, 3};
int array3 [10] = {15, 27, 104, 5, 40, 1, 4, 0, 8, 3};
int array4 [10] = {15, 27, 104, 5, 40, 1, 4, 0, 8, 3};
int array5 [10] = {15, 27, 104, 5, 40, 1, 4, 0, 8, 3};
int array6 [10] = {15, 27, 104, 5, 40, 1, 4, 0, 8, 3};
printf ("Результат поиска: %d\n", Find (array1, 15, 10));
printf ("Сортировка обменом:\t");
Make_1 (array2, 10);

int i = 0;
while (i < 10)
{
printf ("%d, ", array2 [i]);
i ++;
}
printf ("\n");

printf ("Сортировка вставками (послед.поиск):\t");
Make_2 (array3, 10);

i = 0;
while (i < 10)
{
printf ("%d, ", array3 [i]);
i ++;
}
printf ("\n");

printf ("Сортировка вставками (двоичн.поиск):\t");
Make_3 (array4, 10);

i = 0;
while (i < 10)
{
printf ("%d, ", array4 [i]);
i ++;
}
printf ("\n");

// printf ("15, 27, 104, 5, 40, 1, 4, 0, 8, 3\n//\n");
printf ("Работа функции Change:\t");
Change (array5, 3, 9, 5);

i = 0;
while (i < 10)
{
printf ("%d, ", array5 [i]);
i ++;
}
printf ("\n");

printf ("%d\n", Change (array5, 3, 9, 5));
printf ("Быстрая сортировка:\t");
Sort (array6, 0, 9);

i = 0;
while (i < 10)
{
printf ("%d, ", array6 [i]);
i ++;
}
printf ("\n");

return 0;
}

int Find (int array [], int s, int size)
{
int n = 0;
int k = size - 1;
int r = 0;
int m = 0;

while (n < k)
{
m = (k + n) / 2;
// printf ("nacalo = %d, konec = %d\n", n, k);
if (array [m] == s)
{
r = m;
break;
}
if (array [m] > s) k = m - 1;
else n = m + 1;
}

return r;
}

int* Make_1 (int array[], int size) //srtirovka viborom
{
int i = 0;
int j = 0;
int n = 0;
int z = 0;

while (j < size - 1)
{
z = array [j];
i = 0;
while ((i + j) < size)
{
if (array [i + j] < z)
{
z = array [i + j];
n = i + j;
}
i ++;
}
if (z != array [j])
{
array [n] = array [j];
array [j] = z;
}
j ++;
}

return array;
}

int* Make_2 (int array[], int size) //sortirovka vstavkami posledovatelnaja
{
int j = 1;
int i = 0;
int z = 0;
/* int t = 0;
while (t < 10)
{
printf ("%d, ", array [t]);
t ++;
}
printf ("\n");*/
while (j < size)
{
z = array [j];
i = 0;
while (i < j)
{
if (array [i] > z)
{
LastToFirst (array, j + 1, array [j], i, i);
break;
}
i ++;
}
// printf ("j = %d\n", j);
/* t = 0;
while (t < 10)
{
printf ("%d, ", array [t]);
t ++;
}
printf ("\n");*/
j ++;
}

return array;
}

int* Make_3 (int array[], int size) //sortirovka vstavkami dvoichnaja
{
int j = 1;
int z = 0;

while (j < size)
{
z = array [j];
int n = 0;
int k = j - 1;

while (n <= k)
{
int m = (k + n) / 2;
if (array [m] == z) break;
if (array [m] > z) k = m - 1;
else n = m + 1;
}

LastToFirst (array, j + 1, array [j], n, n);
j ++;
}

return array;
}

//============================================================================================

int* LastToFirst (int array[], int size, int what, int where, int from)
{
int i = size - 2;

while (i >= from)
{
array [i + 1 ] = array [i ];
i --;
}

array [where] = what;

return array;
}

//============================================================================================
//============================================================================================

int* Change_1 (int array [], int size, int x)
{
int j = size - 1;
int i = 0;

while (i < j)
{
if (array [i] < x) i ++;
if (array [j] > x) j --;
// else printf ("%d, \n", array [j]);
int n = array [i];
// printf ("array [i] = %d, array [j] = %d\n", array [i], array [j]);
if (array [i] >= x && array [j] <= x)
{
array [i] = array [j];
array [j] = n;
if (j - i <= 2) i ++;
else
{
i ++;
j --;
}
}
/* int t = 0;
while (t < 10)
{
printf ("%d, ", array [t]);
t ++;
}
printf ("\n");*/
}

return array;
}

int Change (int array [], int left, int right, int x) //Partition
{
int j = right;
int i = left;

while (i < j)
{
if (array [i] < x) i ++;
if (array [j] > x) j --;
int n = array [i];
if (array [i] >= x && array [j] <= x)
{
array [i] = array [j];
array [j] = n;
if (array [i] == x || array [j] == x)
{
if (array [i] == x) j --;
if (array [j] == x) i ++;
}
else
{
i ++;
j --;
}
/* int t = 0;
while (t < 10)
{
printf ("%d, ", array [t]);
t ++;
}
printf ("\n");*/
}
}

for (i = left; i < right; i ++)
if (array [i] == x) break;
return i;
}

//============================================================================================

void Sort (int array[], int left, int right) //fast
{
if (left == right || left > right)
return;

if (right - left == 1)
{
if (array [left] > array [right])
{
std::swap (array [left], array [right]);
return;
}
return;
}

int part = random (right - left) + left;
// printf ("%d, %d, %d, %d\n", left, right, part, array [part]);

part = Change (array, left, right, array [part]);

/* int i = 0;
while (i < 10)
{
printf ("%d, ", array [i]);
i ++;
}

printf ("\n\n");*/

Sort (array, left, part - 1);
Sort (array, part + 1, right);
}

Удачи!Я сама не помню уже, что к чему.=)
solnichny-zay 16-05-2007-21:16 удалить
Там второй #include , почему-то не написался...
solnichny-zay 16-05-2007-21:17 удалить
Ну вот, опять!Я пишу #include algorithm, а он не пишет.
solnichny-zay 16-05-2007-21:18 удалить
В треугольных скобках algorithm.


Комментарии (5): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Вот сюда | Нарамакил - | Лента друзей Нарамакил / Полная версия Добавить в друзья Страницы: раньше»