这种排序算法的名称是什么?

时间:2016-02-28 23:21:47

标签: javascript algorithm sorting

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);
}

1 个答案:

答案 0 :(得分:2)

看起来像bubblesort(https://en.wikipedia.org/wiki/Bubble_sort)的递归双向版本,类似于这个变体:https://en.wikipedia.org/wiki/Cocktail_shaker_sort,但两个循环都归为一个(这并没有太大的区别。表现或其他特征)。

请注意,每个递归调用都可以省略第一个和最后一个项,因为它们将是全局最小/最大的(您可以通过添加偏移参数来实现)。

鉴于最多可能有n个递归调用,这可能会导致堆栈溢出。