Учитывая следующий массив: | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
Временная сложность для сортировки массива двоичных чисел
мы должны отсортировать выше массив как все 1 на правой стороне и 0 на левой стороне.
Я придумал 2 алгоритма на C++.
первый один:
for(i = 0; i < n; i++) {
if(a[i] == 1 && i != n - 1) {
for(j = i + 1; j < n; j++) {
if(a[j] == 0) {
temp = a[j];
a[i] = a[j];
a[j] = temp;
break;
}
}
}
}
второй один:
int x = 0;
for(i = 0; i < n; i++) {
if(a[i] == 1) {
for(j = n-x-1; j >= 0; j--) {
if(a[j] == 0) {
temp = a[j];
a[i] = a[j];
a[j] = temp;
x++;
break;
}
}
if(x > n/2)
break;
}
вы можете сказать мне временную сложность обоих. и который лучше работает , также предложите мне лучший алгоритм с объяснением. Благодарю.
читать [Головоломка: сортирует массив из 0 и 1. в одном синтаксического анализа] (http://stackoverflow.com/questions/17900922/puzzle-sort-an-array-of-0s-and-1s- in-one-parse/17901084 # 17901084) –