成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

面試必問(wèn):排序算法,廢話不多說(shuō),直接上代碼[node.js]

iOS122 / 1549人閱讀

摘要:百度渣渣搜出來(lái)的都是版本很少見簡(jiǎn)單版本我正好自己搞了一版分享給你們冒泡排序交換和每次最大元素就像氣泡一樣浮到數(shù)組的最后依次比較相鄰的兩個(gè)元素使較大的那個(gè)向后移如果條件改成則變?yōu)椴环€(wěn)定的排序算法從小到大排序選擇排

百度渣渣搜出來(lái)的都是c,c++,java版本,很少見簡(jiǎn)單js版本,我正好自己搞了一版,分享給你們


//1.冒泡排序
var exchange = function (a, i, j)        // 交換A[i]和A[j]
{
  var temp = a[i];
  a[i] = a[j];
  a[j] = temp;
}

var sort = function (a) {
  var n = a.length;
  for (var j = 0; j < n - 1; j++)            // 每次最大元素就像氣泡一樣"浮"到數(shù)組的最后
  {
    for (var i = 0; i < n - 1 - j; i++)    // 依次比較相鄰的兩個(gè)元素,使較大的那個(gè)向后移
    {
      if (a[i] > a[i + 1])            // 如果條件改成A[i] >= A[i + 1],則變?yōu)椴环€(wěn)定的排序算法
      {
        exchange(a, i, i + 1);
      }
    }
  }

  return a;
}
var a = [6, 5, 3, 1, 8, 7, 2, 4];    // 從小到大排序
// console.log(sort(a))


//------------2.選擇排序------------
var exchange = function (a, i, j)        // 交換A[i]和A[j]
{
  var temp = a[i];
  a[i] = a[j];
  a[j] = temp;
}

var selectSort = function (a) {
  var n = a.length;
  var i, j, min;
  for (i = 0; i <= n - 2; i++)                // 已排序序列的末尾
  {
    min = i;
    for (j = i + 1; j <= n - 1; j++) {  // 未排序序列
      if (a[j] < a[min])// 依次找出未排序序列中的最小值,存放到已排序序列的末尾
      {
        min = j;
      }
    }
    if (min != i) {
      exchange(a, min, i);    // 該操作很有可能把穩(wěn)定性打亂,所以選擇排序是不穩(wěn)定的排序算法
    }
  }
  return a;
}
var a = [6, 5, 3, 1, 8, 7, 2, 4];    // 從小到大排序
console.log(selectSort(a))


//-----------3.插入排序------------

var insertSort = function (a) {
  var n = a.length;
  var i, j, get;
  for (i = 1; i < n; i++)             // 類似抓撲克牌排序
  {
    get = a[i];                     // 右手抓到一張撲克牌
    j = i - 1;                      // 拿在左手上的牌總是排序好的
    while (j >= 0 && a[j] > get)    // 將抓到的牌與手牌從右向左進(jìn)行比較
    {
      a[j + 1] = a[j];            // 如果該手牌比抓到的牌大,就將其右移
      j--;
    }
    a[j + 1] = get;// 直到該手牌比抓到的牌小(或二者相等),將抓到的牌插入到該手牌右邊(相等元素的相對(duì)次序未變,所以插入排序是穩(wěn)定的)
  }
  return a;
}
var a = [6, 5, 3, 1, 8, 7, 2, 4];    // 從小到大排序
console.log(insertSort(a))


//-----------4.shell排序------------

var shellSort = function (a) {
  var n = a.length;
  var i, j, get;
  var h = 0;
  while (h <= n)                          // 生成初始增量
  {
    h = 3 * h + 1;
  }
  while (h >= 1) {
    for (i = h; i < n; i++) {
      j = i - h;
      get = a[i];
      while ((j >= 0) && (a[j] > get)) {
        a[j + h] = a[j];
        j = j - h;
      }
      a[j + h] = get;
    }
    h = (h - 1) / 3;                    // 遞減增量
  }
  return a;
}
var a = [6, 5, 3, 1, 8, 7, 2, 4];    // 從小到大排序
console.log(shellSort(a))


//-----------5.快速排序----------------
var exchange = function (a, i, j)        // 交換A[i]和A[j]
{
  var temp = a[i];
  a[i] = a[j];
  a[j] = temp;
}

var partition = function (a, left, right)  // 劃分函數(shù)
{
  var pivot = a[right];                    // 選擇最后一個(gè)元素作為基準(zhǔn)
  var tail = left - 1;                     // tail為小于基準(zhǔn)的子數(shù)組最后一個(gè)元素的索引
  for (var i = left; i < right; i++)       // 遍歷基準(zhǔn)以外的其他元素
  {
    if (a[i] <= pivot)                   // 把小于等于基準(zhǔn)的元素放到前一個(gè)子數(shù)組中
    {
      tail++;
      exchange(a, tail, i);
    }
  }
  exchange(a, tail + 1, right);            // 最后把基準(zhǔn)放到前一個(gè)子數(shù)組的后邊,剩下的子數(shù)組既是大于基準(zhǔn)的子數(shù)組
  // 該操作很有可能把后面元素的穩(wěn)定性打亂,所以快速排序是不穩(wěn)定的排序算法
  return tail + 1;                         // 返回基準(zhǔn)的索引
}

var quicksort = function (a, left, right) {
  var pivot_index;                        // 基準(zhǔn)的索引
  if (left < right) {
    pivot_index = partition(a, left, right);
    quicksort(a, left, pivot_index - 1);
    quicksort(a, pivot_index + 1, right);
  }
  return a;
}
var a = [6, 5, 3, 1, 8, 7, 2, 4];    // 從小到大排序
console.log(quicksort(a, 0, a.length - 1))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83642.html

相關(guān)文章

  • 一名3年工作經(jīng)驗(yàn)的java程序員應(yīng)該具備的職業(yè)技能

    摘要:一名年工作經(jīng)驗(yàn)的程序員應(yīng)該具備的技能,這可能是程序員們比較關(guān)心的內(nèi)容。數(shù)據(jù)結(jié)構(gòu)和算法分析數(shù)據(jù)結(jié)構(gòu)和算法分析,對(duì)于一名程序員來(lái)說(shuō),會(huì)比不會(huì)好而且在工作中能派上用場(chǎng)。 一名3年工作經(jīng)驗(yàn)的Java程序員應(yīng)該具備的技能,這可能是Java程序員們比較關(guān)心的內(nèi)容。我這里要說(shuō)明一下,以下列舉的內(nèi)容不是都要會(huì)的東西—-但是如果你掌握得越多,最終能得到的評(píng)價(jià)、拿到的薪水勢(shì)必也越高。 1、基本語(yǔ)法 這包括...

    renweihub 評(píng)論0 收藏0
  • 平時(shí)工作時(shí)一些數(shù)組常用方法,以及操作總結(jié)

    摘要:注意啦,這個(gè)方法會(huì)改變?cè)瓟?shù)組長(zhǎng)度的,一般場(chǎng)合都用不到數(shù)組對(duì)象的方法方法將把它的參數(shù)插入的頭部,并將已經(jīng)存在的元素順次地移到較高的下標(biāo)處,以便留出空間。 平時(shí)工作中,少不了使用數(shù)組,對(duì)于后端的返回?cái)?shù)據(jù)有時(shí)若不是符合dom樹渲染的數(shù)據(jù)前端還是會(huì)自己重新用后端返回?cái)?shù)據(jù)重組來(lái)進(jìn)行dom渲染。廢話不多說(shuō),我們先來(lái)看看數(shù)組所包含的方法,也許不是很全,不足處請(qǐng)大家補(bǔ)充,大家相互成長(zhǎng)才是寫這篇文章的目...

    用戶83 評(píng)論0 收藏0
  • android知識(shí)大總結(jié) - 收藏集 - 掘金

    摘要:中簡(jiǎn)單搞定接口訪問(wèn),以及簡(jiǎn)析掘金最近總結(jié)的一些經(jīng)驗(yàn),對(duì)于或中使用接口的一些心得。這里,本文將數(shù)據(jù)結(jié)構(gòu)之學(xué)習(xí)總結(jié)掘金前言前面介紹了的數(shù)據(jù)結(jié)構(gòu),今天抽空學(xué)習(xí)總結(jié)一下另一種數(shù)據(jù)結(jié)構(gòu)。淺析事件傳遞掘金中的事件傳遞主要涉及三個(gè)方法和。 Android 系統(tǒng)中,那些能大幅提高工作效率的 API 匯總(持續(xù)更新中...) - 掘金前言 條條大路通羅馬。工作中,實(shí)現(xiàn)某個(gè)需求的方式往往不是唯一的,這些不...

    luodongseu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<