查看完整版本: 几种排序的方法

tension 2007-10-11 17:54

几种排序的方法

[html]<style>
fieldset {
        font-size:12px;
        padding:10px;
        width:80%;
        margin:auto;
}
input {
        font-size:12px;
        font-family:Tahoma;
}
</style>
<title>排序</title>
<h3 align="center">排序</h3>
<fieldset>
<legend>插入排序</legend>

<p><b>直接插入排序</b>
请输入一段要排序的字符,用半角逗号隔开
<input name=insert type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(InsertSort(insert.value.split(',')));">

<p><b>希儿排序</b><br>
  <input name=Shell type=text size=100 value="g,v,u,f,p,o,i,a,t,j">
<br><input type=button value=" 排序 " onclick="alert(ShellSort(Shell.value.split(',')));">

</fieldset>
<p>
<fieldset>
<legend>交换排序</legend>

<b>冒泡排序</b><br>
<input name=bubble type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(BubbleSort(bubble.value.split(',')));">

<p><b>快速排序<br>
</b>
  <input name=quick type=text size=100 value="3,1,5,4,6">
<br><input type=button value=" 排序 " onclick="alert(QuickSortDemo(quick.value.split(',')));">

</fieldset>
<p>
<fieldset>
<legend>选择排序</legend>

<b>直接选择排序</b><br>
<input name=select1 type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(SelectSort(select1.value.split(',')));">

<p>... ...

</fieldset>


<script>
        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>
[/html]
页: [1]
查看完整版本: 几种排序的方法