Сортировка пузырьком
Страница 2. Упрощение алгоритма сортировки пузырьком


Упрощение алгоритма сортировки пузырьком

Это можно упростить до следующего вида:

#include <iostream>

using namespace std;

int array[200];

// сортировка
void Sort(int col)
{
int trash=0;
bool f=true;
for (int i=1; (i<=col) && (f=true) ; i++)
{
f=
false;
for (int j=1; j<=col-i; j++)
{
if (array [j]>array [j+1])
{
trash=array[j];
array [j]=array [j+1];
array [j+1]=trash;
f=
true;
}
}
}
}

// вывод
void Out(int col)
{
for (int i=1; i<=col; i++)
cout << array [i] <<" ";
cout << endl;
}

// главная
int main()
{
int col_el;

// ввод данных
cout << " Enter length of array"<< endl;
cin >> col_el;
for (int n=1; n<=col_el ; n++)
cin >> array[n];
 // сортировка
Sort(col_el);

// вывод
cout << "Result is :"<<endl;
Out(col_el);
cin >> col_el;

return 0;
}
Суть упрощения заключается в том, что используется дополнительная булева переменная F. При каждом заходе в первый цикл ей присваивается значение false и, если в процессе выполнения один из элементов будет не отсортирован, то значение этой переменной меняется на true и первый цикл продолжается дальше. В противном случае, если значение не поменялось, то это значит, что уже нечего сортировать.

Данная сортировка выполняет n*(n-1)*(n-2)*...*(2)*(1) операций (в худшем случае).
 
« Предыдущая статья   Следующая статья »