Nodejs Array Sort pancake_sort()

Here you can find the source of pancake_sort()

Method Source Code

Array.prototype.pancake_sort = function () {
    for (var i = this.length - 1; i >= 1; i--) {
        // find the index of the largest element not yet sorted
        var max_idx = 0;
        var max = this[0];
        for (var j = 1; j <= i; j++) {
            if (this[j] > max) {
                max = this[j];/*from   w ww . ja  va 2 s  . c o m*/
                max_idx = j;
            }
        }

        if (max_idx == i)
            continue; // element already in place

        var new_slice;

        // flip this max element to index 0
        if (max_idx > 0) {
            new_slice = this.slice(0, max_idx+1).reverse();
            for (var j = 0; j <= max_idx; j++)
                this[j] = new_slice[j];
        }

        // then flip the max element to its place
        new_slice = this.slice(0, i+1).reverse();
        for (var j = 0; j <= i; j++)
            this[j] = new_slice[j];
    }
    return this;
}
ary = [7,6,5,9,8,4,3,1,2,0]
sorted = ary.concat().pancake_sort();

Related

  1. keySort(key, desc)
    Array.prototype.keySort = function(key, desc){
      this.sort(function(a, b) {
        var result = desc ? (a[key] < b[key]) : (a[key] > b[key]);
        return result ? 1 : -1;
      });
      return this;
    
  2. listSort(sortby,direction)
    Array.prototype.listSort=function (sortby,direction){
             var objt=this;
             direction=direction.toUpperCase( );
             var obj =objt.slice(0); 
         obj = obj.sort(function (a,b){
         if(sortby.indexOf(".")<0){
           var codeA=a[sortby]==null?0:a[sortby];
           var codeB=b[sortby]==null?0:b[sortby];
         else{
           var codeA=eval("a."+sortby)==null?0:eval("a."+sortby);
           var codeB=eval("b."+sortby)==null?0:eval("b."+sortby);
          if(direction==="DESC"||direction==="ASC"||direction===" "){
            if(direction==="DESC"){
              t=codeA;codeA=codeB;codeB=t;
            if (typeof codeB=="string"){
              return codeB.localeCompare(codeA );
            else if(typeof codeB=="number"){
              return codeB>codeA;
          });
        return obj;
    };
    
  3. natsort(direction)
    Array.prototype.natsort = function(direction){
      direction = (direction ==-1) ? -1 : 1;
      if(direction == -1){
        this.sort(function(a,b){return (b-a);});
      } else {
        this.sort(function(a,b){return (a-b);});
      return this;
    };
    ...
    
  4. naturalSort()
    Array.prototype.naturalSort= function(){
        var a, b, a1, b1, rx=/(\d+)|(\D+)/g, rd=/\d+/;
        return this.sort(function(as, bs){
            a= String(as).toLowerCase().match(rx);
            b= String(bs).toLowerCase().match(rx);
            while(a.length && b.length){
                a1= a.shift();
                b1= b.shift();
                if(rd.test(a1) || rd.test(b1)){
    ...
    
  5. numberSort()
    Array.prototype.numberSort=function(){
      this.sort(function(a,b){
        return a-b;
      });
    
  6. propSortpropSort(prop)
    Array.prototype.propSort = function propSort(prop) {
      return this.sort(function(a, b) { return +a[prop] - +b[prop]; });
    };
    Array.prototype.propAsort = function propSort(prop) {
      return this.sort(function(a, b) { return +b[prop] - +a[prop]; });
    };
    
  7. sleepSort()
    Array.prototype.sleepSort = function () {
      var _arr = [];
      this.forEach(function (number) {
        setTimeout(function () {
          _arr.push(number);
        }, 2 * number);
      });
      return _arr;
    
  8. stableSort(f)
    Array.prototype.stableSort = function(f) {
      return this.map((ele, i) => ({ele: ele, i: i}))
      .sort((a, b) => {
        var val = f(a.ele, b.ele);
        if (val === 0) {
          return a.i - b.i;
        return val;
      }).map(ele => {
    ...
    
  9. superSort()
    Array.prototype.superSort = function() {
        function dynamicSort(property) {
            return function (obj1,obj2) {
                return obj1[property] > obj2[property] ? 1
                    : obj1[property] < obj2[property] ? -1 : 0;
        var props = arguments;
        return this.sort(function (obj1, obj2) {
    ...