Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var slowSort = function( arr, i, j ){
i === void 0 && (i = 0);
j === void 0 && (j = arr.length - 1);
var m, tmp;
if( i >= j )
return;
else{
m = ((i + j) / 2) | 0;
slowSort( arr, i, m );
slowSort( arr, m + 1, arr.length - 1 );
if( arr[m] > arr[j] ){
tmp = arr[m];
arr[m] = arr[j];
arr[j] = tmp;
//console.log(m,j) //uncomment for log all swaps
}
slowSort( arr, i, j - 1 );
}
}
var arr = [5,4,3,2,1,6,7,10,0];
slowSort(arr);
console.log(arr);
Число сравнений в этом алгоритме [ленивого поиска research] не зависит ни от X, ни от Ai и задаётся следующей рекурсивной формулой:research(X,i,j) заканчивается после 1 сравнения и одного рекурсивного вызова research(X,i,m), то есть получается 1+T([n/2]), что сводится к Θ(log n). В худшем случае — Θ(n), но в худшем случае и наивный алгоритм справляется.int index(int A[],int L,int X){
int b=0;
for(int k=1;k<=L;k++){
int a=(A[k-1]^X)|b;
b|=((a|-a)>>31)&k;
}
return b-1;
}
int index(int *A,int L,int X){
int k,p;
k=1;
for(;;){
switch(k){
case 1: k=2-((L|-L)>>31); break;
case 2: return -1;
case 3: p=L-1; k=(((X>>31)|(int)((unsigned int)(-X)>>31)))+5; break;
case 4: X++; k=7; break;
case 5: k=8; break;
case 6: X--; k=12; break;
case 7: A[p]++; p--; k+=((p>>31)<<2); break;
case 8: p=L; p--; k=9; break;
case 9: k=11+((A[p]|-A[p])>>31); break;
case 10: p--; k=9-((p>>31)<<1); break;
case 11: return p;
case 12: A[p]--; p--; k-=(p>>31); break;
case 13: k=3; break;
}
}
}
Интуитивно, неторопливый алгоритм, решающий задачу P, — это алгоритм, который впустую тратит время настолько мудрёным образом, что позволяет обмануть среднестатистического наивного наблюдателя.
Пессимальные Алгоритмы и Анализ Вычислительной Усложнённости