Прямые методы сортировки
void Bubblesort(int a[],int n) {
std::chrono::high_resolution_clock::time_point t5 = std::chrono::high_resolution_clock::now();
int tmp,i, L = 0, R = n - 1, pos = 0, assings=0, cmp=0;
while(L<R) {
i = L;
pos = -1;
for (int j = i+1; j < n; ++j) {
if (a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
pos = i;
++assings;
}
++i;
++cmp;
}
if (pos == -1) {
break;
}
R = pos;
i = R;
}
void DirectInclusion(int a[], int n) {
std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
int j,x, assings=0, cmp=0;
for (int i = 1; i < n ; ++i) {
x = a[i];
j = i - 1;
++assings;
while (x < a[j] && j >= 0) {
a[j + 1] = a[j];
j = j - 1;
++assings;
}
a[j + 1] = x;
++assings;
}
std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> seconds = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1);
printf("Время работы: %.10f seconds", seconds.count());
cout << endl;
cout << "Количество сравнений: " << cmp << "\nКоличество присваиваний: " << assings << endl;
}
void SelectionSort(int a[],int n) {
std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
int min,minNum=0,L=0,R=n-1,assings=0,cmp=0;
for (int i = 0; i < n - 1; ++i) {
min = INT_MAX;
for (int j = i; j < n; ++j) {
if (a[j] < min) {
min = a[j];
minNum = j;
}
++cmp;
}
a[minNum] = a[i];
a[i] = min;
++assings;
}
cout << "Количество сравнений: " << cmp << "\nКоличество присваиваний: " << assings<<endl;
std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> seconds = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1);
printf("Время работы: %.10f seconds", seconds.count());
cout << endl;
}
Сделал 3 метода сортировки
- Сортировка прямым обменом (пузырек)
- Сортировка прямым выбором
- Сортировка прямым включением
Пытаюсь разбить массив на 2 части: отсортированную и неотсортированную. С пузырьком проблем не было, а с остальными 2 не получается. Мне надо аналогично это сделать для прямого выбора и включения
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
После внешнего цикла сортировки вставками со счётчиком i часть массива 0..i-1 является отсортированной, но не совпадает (обычно) с той же частью в финальном (после окончания сортировки) массиве.
После внешнего цикла сортировки выбором со счётчиком i часть массива 0..i отсортирована, и совпадает с той же частью в финальном массиве.