javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

前端之家收集整理的这篇文章主要介绍了javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_502_0@javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)


@H_502_0@一、快速排序算法


<div class="cnblogs_code">

函数首先检查数组的长度是否为0。如果是,那么这个数组就不需要任何排序,函数直接返回。
* 否则,创建两个数组,一个用来存放比基准值小的元素,另一个用来存放比基准值大的元素。
* 这里的基准值取自数组的第一个元素。
* 接下来,这个函数对原始数组的元素进行遍历,根据它们与基准值的关系将它们放到合适的数组中。
* 然后对于较小的数组和较大的数组分别递归调用这个函数。
* 当递归结束时,再将较大的数组和较小的数组连接起来,形成最终的有序数组并将结果返回。
* 
 (arr.length == 0 left = [];
     right = [];
     pivot = arr[0 ( i = 1; i < arr.length; i++ (arr[i] < a = ( i = 0; i < 10; ++= Math.floor((Math.random()*100)+1
console.log("排序前: "+"排序后: "+qSort(a));
@H_502_0@二、希尔排序算法

.dataStore =.pos = 0; .numElements = numElements; .insert = insert;方法 .toString = toString;显示数组中所有元素 .clear = clear; .setData = setData;生成了存储在数组中的随机数字 .gaps = gaps; .shellSort = shellSort;
<span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;将传入的数组,存储在datastore中</span><span style="color: #008000;"&gt;*/</span>
<span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;var</span> i = 0; i < numElements.length; ++<span style="color: #000000;"&gt;i) {
    </span><span style="color: #0000ff;"&gt;this</span>.dataStore[i] =<span style="color: #000000;"&gt; numElements[i];
}

}

<span style="color: #0000ff;">function<span style="color: #000000;"> setData() {
<span style="color: #0000ff;">for (<span style="color: #0000ff;">var i = 0; i < <span style="color: #0000ff;">this.numElements; ++<span style="color: #000000;">i) {
<span style="color: #0000ff;">this.dataStore[i] = Math.floor(Math.random() *<span style="color: #000000;">
(<span style="color: #0000ff;">this.numElements+1<span style="color: #000000;">));
}
}

<span style="color: #0000ff;">function<span style="color: #000000;"> clear() {
<span style="color: #0000ff;">for (<span style="color: #0000ff;">var i = 0; i < <span style="color: #0000ff;">this.dataStore.length; ++<span style="color: #000000;">i) {
<span style="color: #0000ff;">this.dataStore[i] = 0<span style="color: #000000;">;
}
}

<span style="color: #0000ff;">function<span style="color: #000000;"> insert(element) {
<span style="color: #0000ff;">this.dataStore[<span style="color: #0000ff;">this.pos++] =<span style="color: #000000;"> element;
}

<span style="color: #0000ff;">function<span style="color: #000000;"> toString() {
<span style="color: #0000ff;">var retstr = ""<span style="color: #000000;">;
<span style="color: #0000ff;">for (<span style="color: #0000ff;">var i = 0; i < <span style="color: #0000ff;">this.dataStore.length; ++<span style="color: #000000;">i) {
retstr += <span style="color: #0000ff;">this.dataStore[i] + " "<span style="color: #000000;">;
<span style="color: #0000ff;">if (i > 0 && i % 10 == 0<span style="color: #000000;">) {
retstr += "\n"<span style="color: #000000;">;
}
}
<span style="color: #0000ff;">return<span style="color: #000000;"> retstr;
}

<span style="color: #008000;">/*<span style="color: #008000;">

  • 外循环控制间隔序列的移动。也就是说,算法在第一次处理数据集时,会检查所有间隔为5的元素。
  • 下一次遍历会检查所有间隔为3的元素。
  • 最后一次则会对间隔为1的元素,也就是相邻元素执行标准插入排序。
  • 在开始做最后一次处理时,大部分元素都将在正确的位置,算法就不必对很多元素进行交换。
  • 这就是希尔排序比插入排序更高效的地方。
  • <span style="color: #008000;">*/
    <span style="color: #0000ff;">function<span style="color: #000000;"> shellSort() {
    console.log("排序前"+": "+<span style="color: #000000;">myNums.toString());
    <span style="color: #0000ff;">for(<span style="color: #0000ff;">var g = 0; g < <span style="color: #0000ff;">this.gaps.length; ++<span style="color: #000000;">g) {
    <span style="color: #0000ff;">for(<span style="color: #0000ff;">var i = <span style="color: #0000ff;">this.gaps[g]; i < <span style="color: #0000ff;">this.dataStore.length; ++<span style="color: #000000;">i) {
    <span style="color: #0000ff;">var temp = <span style="color: #0000ff;">this<span style="color: #000000;">.dataStore[i];
    <span style="color: #0000ff;">for(<span style="color: #0000ff;">var j = i; j >= <span style="color: #0000ff;">this.gaps[g] && <span style="color: #0000ff;">this.dataStore[j - <span style="color: #0000ff;">this.gaps[g]] > temp; j -= <span style="color: #0000ff;">this<span style="color: #000000;">.gaps[g]) {
    <span style="color: #0000ff;">this.dataStore[j] = <span style="color: #0000ff;">this.dataStore[j - <span style="color: #0000ff;">this<span style="color: #000000;">.gaps[g]];
    }
    <span style="color: #0000ff;">this.dataStore[j] =<span style="color: #000000;"> temp;
    <span style="color: #008000;">//<span style="color: #008000;"> console.log(g+"--"+i+": "+myNums.toString());
    <span style="color: #000000;"> }
    console.log(g+": "+<span style="color: #000000;">myNums.toString());
    }

}

<span style="color: #008000;">//<span style="color: #008000;"> 希尔排序测试代码
<span style="color: #0000ff;">var numElements = [0,9,1,8,7,6,2,3,5,4<span style="color: #000000;">];
<span style="color: #0000ff;">var gaps = [3,1<span style="color: #000000;">];
<span style="color: #0000ff;">var myNums = <span style="color: #0000ff;">new<span style="color: #000000;"> CArray(numElements,gaps);
myNums.shellSort();
console.log("排序后"+": "+myNums.toString());

@H_502_0@ 

猜你在找的JavaScript相关文章