var counter = 0;
function sort(arr)
{
var totalItem = arr.length;
var temp ;
var index;
var isSortDone = true;
for( index = 0 ; index < totalItem ; index ++)
{
if(arr[index] > arr[index+1])
{
temp = arr[index];
arr[index] = arr[index+1];
arr[index+1] = temp ;
isSortDone = false;
}
if(arr[totalItem-(1+index)] < arr[totalItem-(2+index)] )
{
temp = arr[totalItem-(1+index)]
arr[totalItem-(1+index)] = arr[totalItem-(2+index)]
arr[totalItem-(2+index)] = temp
isSortDone = false;
}
counter++;
}
if(isSortDone == true) { console.log(counter + ":Sort is Done", arr); return 0;}
return sort(arr);
}
答案 0 :(得分:2)
看起来像bubblesort(https://en.wikipedia.org/wiki/Bubble_sort)的递归双向版本,类似于这个变体:https://en.wikipedia.org/wiki/Cocktail_shaker_sort,但两个循环都归为一个(这并没有太大的区别。表现或其他特征)。
请注意,每个递归调用都可以省略第一个和最后一个项,因为它们将是全局最小/最大的(您可以通过添加偏移参数来实现)。
鉴于最多可能有n个递归调用,这可能会导致堆栈溢出。