Алгоритмы сортировки элементов массива
ОГЛАВЛЕНИЕ
Сей мануал раскрывает несколько наиболее распространенных алгоритмов сортировки массивов.
Сортировка пузырьком
void sortbubble(long num, float *array)
// num - число эллементов
// array - указатель на первый эллемент массива
{
// сортировка с использованием известного метода пузырька
short sorted = 1; //флаг, 0 - массив не отсортирован, 1 - sorted
short changed = 0; //флаг, смена наименьшей пары
float temp;
do
{
changed = 0;
for (long i = 0; i < num - 1; i++)
{
if (array[i] > array[i+1])
{
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
changed = 1;
}
}
sorted = !changed;
} while (!sorted);
}
Минимальная сортировка
void sortminima (long num, float *array)
// num - число эллементов
// array - указатель на первый эллемент массива
{
long k,s,t;
k = 0;
float temp;
while (k < num)
{
s = k;
t = s;
while (t < num-1)
{
t++;
if (array[t] < array[s]) s = t;
}
temp = array[s];
array[s] = array[k];
array[k] = temp;
k++;
}
}
Сортировка простой вставкой
void sortsimpinc(long num, float *array)
// num - число эллементов
// array - указатель на первый эллемент массива
{
long i,j,k;
float temp;
i = 1;
do
{
j = 0;
do
{
if (array[i] <= array [j])
{
k = i;
temp = array[i];
do
{
array[k] = array[k-1];
k--;
} while (k > j);
array[j] = temp;
j = i;
}
else j++;
} while (j < i);
i++;
} while (i < num);
}
Сортировка двоичной вставкой
void sortbininc(long num, float *array)
// num - число эллементов,
// array - указатель на первый эллемент массива.
{
long i, b, e, c, k;
float temp;
i = 1;
do
{
b = 0;
e = i - 1;
c= (b + e)/2;
while (b != c)
{
if (array[c] > array[i]) e=c; else b=c;
c = (b + e)/2;
}
if (array[b] < array[i])
if (array[i] > array[e]) b = e + 1; else b = e;
k=i;
temp = array[i];
while (k > b)
{
array[k] = array[k-1];
k--;
}
array[b] = temp;
i++;
} while (i < num);
}
Shell сортировка
void sortshell (long num, float *array)
// num - число эллементов
// array - указатель на первый эллемент массива
{
long i,j,g;
short c; //флаг
float temp;
g = num/2;
do
{
i = g;
do
{
j = i - g;
c = 1;
do
{
if (array[j] <= array[j+g]) c = 0;
else
{
temp = array[j];
array[j] = array[j+g];
array[j+g] = temp;
}
j--;
} while(j >= 0 && c);
i++;
} while(i < num);
g = g/2;
} while(g > 0);
}