排序算法总结

    最近工作跟js打交道较多,同时由于复习和总结各种排序算法,索性将各种排序算法用JavaScript实现一遍,即熟悉了算法又联系了JavaScript面向对象编程的设计。

   以下为各个排序算法实现代码,各种排序算法详细设计说明稍后跟进。

   <HTML> <HEAD> <TITLE>算法排序总结</TITLE> <mce:script type="text/javascript"><!-- /* 标题:算法排序总结 设计:卢松强 博客:http://hi.csdn.net/andensy 日期:2010年1月27日 */ /* 插入排序(稳定) */ var InsertSort=function(arr){ this.arry=arr; } InsertSort.prototype = { sort:function(){ var arry=this.arry; var temp; var j; for(var i=1;i<arry.length;i++){ //从第一个数开始,进行n-1趟插入 temp=arry[i]; //取得每一次要插入的数值 j=i-1; while(j>=0&&temp<arry[j]){ //如果符合排序条件,找到插入点 arry[j+1]=arry[j]; //将该元素之前的数值往后移 j--; //找到插入位置的前一个元素、j+1为插入位置 } arry[j+1]=temp; } return arry; }, sortIndex:function(tem1,tem2){ } } /* 选择排序(不稳定) */ var SelectSort=function(arr){ this.arry=arr; } SelectSort.prototype={ sort:function(){ var arry=this.arry; var k,temp; for(var i=0;i<arry.length-1;i++){ //进行n-1趟选择 k=i for(var j=i+1;j<arry.length;j++){ if(arry[k]>arry[j]) k=j; //找到最小的值下标k } //交换最小值arry[k]和arry[i]; temp=arry[i]; arry[i]=arry[k]; arry[k]=temp; } return arry; } } /* 冒泡排序(稳定) */ var BubbleSort=function(arr){ this.arry=arr; } BubbleSort.prototype={ sort:function(){ var arry=this.arry; var temp,isSort; for(var i=0;i<arry.length-1;i++){ //进行n-1趟冒泡 isSort=true; for(var j=arry.length-1;j>i;j--){ //进行n-i次比较 if(arry[j]<arry[j-1]){ temp=arry[j-1]; arry[j-1]=arry[j]; arry[j]=temp; isSort=false; //设置退出标识位 } } if(isSort) break; } return arry; } } /* 快速排序(稳定) */ var QuickSort=function(arr){ this.arry=arr; } QuickSort.prototype={ sort:function(){ var arry=this.arry; this.run(arry,0,arry.length-1); return arry; }, run:function(arr,left,right){ var middle=arr[left]; //找到标识值 var temp; var i=left; var j=right; do{ while((arr[i]<middle)&&(i<right)) i++; while((arr[j]>middle)&&(j>left)) j--; if(i<=j) { temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; i++; j--; } }while(i<=j); if(left<j) this.run(arr,left,j); if(right>i) this.run(arr,i,right); return arr; } } /* 堆排序(不稳定) */ var HeapSort=function(arr){ this.arry=arr; } HeapSort.prototype={ Heapify:function(arr,i,length){ var large; var flag=true; while((2*i)<=length) { large=i; flag=false; if((2*i)<length&&arr[2*i]>arr[large]) { large=2*i; flag=true; } if((2*i+1)<length&&arr[(2*i+1)]>arr[large]) { large=(2*i+1); flag=true; } this.Swap(arr,i,large); i=large; if(!flag) break; } }, sort:function(){ var arry=this.arry; this.BuildHeap(arry); return arry; }, BuildHeap:function(arry){ for(var i=Math.floor(arry.length/2);i>=0;i--){ this.Heapify(arry,i,arry.length); } for(var i=(arry.length-1);i>0;i--){ this.Swap(arry,0,i); this.Heapify(arry, 0, i); } }, Swap:function(arr,h1,h2){ var t=arr[h1]; arr[h1]=arr[h2]; arr[h2]=t; } } var arrs=[49, 38, 65, 97, 76, 13, 27, 49,11,15,61]; var Sort=new InsertSort(arrs); //var Sort=new SelectSort(arrs); //var Sort=new BubbleSort(arrs); //var Sort=new QuickSort(arrs); //var Sort=new HeapSort(arrs); alert(Sort.sort()); // --></mce:script> </HEAD> <BODY> </BODY> </HTML>

你可能感兴趣的:(排序算法总结)