Алгоритмы сортировки элементов массива

ОГЛАВЛЕНИЕ

Сей мануал раскрывает несколько  наиболее распространенных алгоритмов сортировки массивов.


 

Сортировка пузырьком

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);
}