Я только что начал DSA и задал вопрос о сортировке вставки.Вставка Сортировка по обмену
Эта версия из учебников/учебников.
void insertion_sort(int A[], int n) {
for (int i = 0; i < n; i++) {
int temp = A[i];
int j = i;
while (temp < A[j - 1] && j > 0) {
A[j] = A[j - 1];
j = j - 1;
}
A[j] = temp;
}
}
Я думал бы это сделать разницу, если бы мы использовали swapping
числа вместо сдвига числа и вставки значения temp
в правильном положении отверстия.
void insertionSort(int A[], int n) {
for (int i = 0; i < n; i++) {
int temp = A[i];
int j = i;
while (temp < A[j - 1] && j > 0) {
swap(A[j], A[j - 1]);
j--;
}
}
}
Своп Код:
void swap(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
О, и это было бы действительно удивительным, если кто-то может объяснить Time Сложности обоих.
Они оба будут O (n^2). Обмен для переключения - приятный штрих. – AndyG
Подкачка включает в себя значительно больше ассигентов (по постоянному коэффициенту), поэтому его важная оптимизация. – rici
Не связано с вашим вопросом, но обе версии разыгрывают память до A []. Сравнение «temp Neil