.. , .
, .
. , .
. . 1. , . . , N , N-1 .
, . . , . , , 27 , 28- .
/* array - () */
/* count - () */
/* size - */
void sort(int *array, int *count, int size)
{
register int i, j;
for(i = 0; i < size; i++)
count[i] = 0;
for(i = 0; i < size - 1; i++)
{
for(j = i + 1; j < size; j++)
{
if(array[i] < array[j])
count[j]++;
else
count[i]++;
}
}
return;
}
.
a[0].. a[15].
1. 8 2- (a[0], a[8[), (a[1],a[9]),..., (a[7], a[15]).
2. 4 (a[0], a[4], a[8], a[12]),..., (a[3], a[7], a[11], a[15]).
4, 12, 13, 18, - 3, 5, 8, 9 ..
3. 2 8 , (a[0], a[2], a[4], a[6], a[8], a[10], a[12], a[14]).
4.
void Shella(int *a,int n)
{
int h, i, t;
int k; // p p
h=n / 2; // p
while (h>0)
{ // y p 1
// yp pp p h
k=1;
while (k)
{
// , p
k=0;
for (i=0; i< n-h;i++)
{ //p - p h }
if (a[i]>a[i+h])
{
t=a[i]; a[i]=a[i+h]; a[i+h]=t;
k=1; // p p
}
}
}
h=h / 2; //{ y p } } }
.
, . . , : . , , , .
|
|
1. .
2. , . , ; - , . ( , , .)
3. , 4, - 1.
4. , - .
int BinarySearch(int a[],i, j, int x)
{
int, middle;
while (i <= j)
{
middle = (i + j)/2;
if (x == a[middle])
return middle;
else
if (x > a[middle])
i = middle + 1;
else
j = middle - 1;
}
return -1;
}
#include <stdio.h>
#include <stdlib.h>
void merge(int a[], int lb, int split, int ub)
{
int pos1=lb;
int pos2=split+1;
int pos3=0;
int *temp =(int*)malloc((ub-lb+1)*sizeof(int));
while (pos1<=split && pos2<=ub)
{
if (a[pos1]<a[pos2])
temp[pos3++]=a[pos1++];
else
temp[pos3++]=a[pos2++];
}
while (pos2<=ub)
temp[pos3++]=a[pos2++];
while (pos1<=split)
temp[pos3++]=a[pos1++];
for (pos3=0; pos3<ub-lb+1; pos3++)
a[lb+pos3]=temp[pos3];
free(temp);
}
void mergsort(int a[], int lb, int ub)
{
int split;
if (lb<ub)
{
split = (lb + ub)/2;
mergsort(a, lb, split);
mergsort(a, split+1, ub);
merge(a, lb, split, ub);
}
}
void main()
{
int c[5];
for (int i=0;i<5; i++)
scanf("%d", &c[i]);
mergsort(c, 0, 4);
for (int i=0;i<5; i++)
printf("%d ", c[i]);
}