JS排序算法


function InsertSort(arr) { //插入排序->直接插入法排序

  var st = new Date();

  var temp, j;

  for(var i=1; i<arr.length; i++) {

   if((arr[i]) < (arr[i-1])) {

    temp = arr[i];

    j = i-1;

    do {

     arr[j+1] = arr[j];

     j--;

    }

    while (j>-1 && (temp) < (arr[j]));

    arr[j+1] = temp;

   }//endif

  }

  status = (new Date() - st) + ' ms';

  return arr;

 }





 function ShellSort(arr) { //插入排序->希儿排序

  var st = new Date();

  var increment = arr.length;

  do {

   increment = (increment/3|0) + 1;

   arr = ShellPass(arr, increment);

  }

  while (increment > 1)



  status = (new Date() - st) + ' ms';

  return arr;

 }

 function ShellPass(arr, d) { //希儿排序分段执行函数

  var temp, j;

  for(var i=d; i<arr.length; i++) {

   if((arr[i]) < (arr[i-d])) {

    temp = arr[i]; j = i-d;

    do {

     arr[j+d] = arr[j];

     j = j-d;

    }

    while (j>-1 && (temp) < (arr[j]));

    arr[j+d] = temp;

   }//endif

  }

  return arr;

 }





 function BubbleSort(arr) { //交换排序->冒泡排序

  var st = new Date();

  var temp;

  var exchange;

  for(var i=0; i<arr.length; i++) {

   exchange = false;

   for(var j=arr.length-2; j>=i; j--) {

    if((arr[j+1]) < (arr[j])) {

     temp = arr[j+1];

     arr[j+1] = arr[j];

     arr[j] = temp;

     exchange = true;

    }

   }

   if(!exchange) break;

  }

  status = (new Date() - st) + ' ms';

  return arr;

 }



 function QuickSortDemo(arr) {

  var st = new Date();

  var result = QuickSort(arr);

  status = (new Date() - st) + ' ms';

  return result;

 } 



 function QuickSort(arr) { //交换排序->快速排序

  if (arguments.length>1) {

   var low = arguments[1];

   var high = arguments[2];

  } else {

   var low = 0;

   var high = arr.length-1;

  }

  if(low < high){

   // function Partition

   var i = low;

   var j = high;

   var pivot = arr[i];

   while(i<j) {

    while(i<j && arr[j]>=pivot)

     j--;

    if(i<j)

     arr[i++] = arr[j];

    while(i<j && arr[i]<=pivot)

     i++;

    if(i<j)

     arr[j--] = arr[i];

   }//endwhile

   arr[i] = pivot;

   // end function

   var pivotpos = i; //Partition(arr,low,high);

   QuickSort(arr, low, pivotpos-1);

   QuickSort(arr, pivotpos+1, high);

  } else

   return;

   return arr;

 }

 

 /*function Partition(arr, i, j) { //快速排序, 对待排序的数组进行划分

  var pivot = arr[i];

  while(i<j) {

   while(arr[j]>=pivot)

    j--;

   if(i<j)

    arr[i++] = arr[j];

   while(arr[i]<=pivot)

    i++;

   if(i<j)

    arr[j--] = arr[i];

  }

  arr[i] = pivot;

  return arr;

 }*/



 function SelectSort(arr) { //选择排序->直接选择排序

  var st = new Date();

  var temp;

  for(var i=0; i<arr.length; i++) {

   var k = i;

   for(var j=i+1; j<arr.length; j++) {

    if((arr[j]) < (arr[k]))

     k = j;

   }

   if (k != i){

    temp = arr[i];

    arr[i] = arr[k];

    arr[k] = temp;

   }

  }

  status = (new Date() - st) + ' ms';

  return arr;

 }

 



 function unicode(str) {//求字符串的unicode码

  var uni=0;

  for(var i=0; i<str.length; i++){

   uni += str.charCodeAt(i)/6553.5 * Math.pow(10, str.length-i);

  }

  return uni;

 }

</script>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值