直接插入排序法原理及其js實現

來源:互聯網
上載者:User

標籤:程式設計語言   code   包含   alt   技術分享   直接插入   amp   插入排序   語言   

直接插入排序法就像我們打撲克牌時整理牌面一樣,先讓我們腦補一下我們打牌的過程。

首先摸了一張6,

接著摸到一張4,比6小,插到6的前面;

又摸到一張7,比6大,插到6的後面;

又摸到一張5,比6小,比4大,插到4和6中間;

。。。。

以上的過程,其實就是典型的直接插入排序,每次將一個新資料插入到有序隊列中的合適位置裡

步驟:

1.首先將數組第1個數看成是一個有序序列。

2.將數組的第2個數按照關鍵字大小插入到這個有序序列中,插入後得到了一包含兩個數的有序序列。

3.接下來再重複上面的步驟將第3,第4……第n-1個數分別插入到該有序序列中,最終得到一個包含n個數的有序序列。

很簡單吧,接下來,我們要將這個演算法轉化為程式設計語言。

假設有一組無序序列 R0, R1, ... , RN-1。

(1) 我們先將這個序列中下標為 0 的元素視為元素個數為 1 的有序序列。

(2) 然後,我們要依次把 R1, R2, ... , RN-1 插入到這個有序序列中。所以,我們需要一個外部迴圈,從下標 1 掃描到 N-1 。

(3) 接下來描述插入過程。假設這是要將 Ri 插入到前面有序的序列中。由前面所述,我們可知,插入Ri時,前 i-1 個數肯定已經是有序了。

所以我們需要將Ri 和R0 ~ Ri-1 進行比較,確定要插入的合適位置。這就需要一個內部迴圈,我們一般是從後往前比較,即從下標 i開始向 0 進行掃描。 

js代碼實現

        let dat=[5, 8, 10, 3, 2, 18, 17, 9];       function insertSort(data) {        var  temp;//用於儲存需要插入的資料        //注意i從1開始,因為以data[0]為基準數        for(let i=1;i<data.length;i++){            temp=data[i]; //將第i個數儲存,以供之後插入合適位置使用            // 因為前i-1個數都是從小到大的有序序列,只要當前比較的數(data[j-1])比temp大,就把這個數後移一位            for(var j=i;j>=0&&data[j-1]>temp;j--){   //這塊j得用var聲明,因為在for迴圈之外的範圍還要用j                data[j]=data[j-1];            }            data[j]=temp;//將temp插入合適的位置        }        return data;       }            var sortedData=insertSort(dat);        console.log(sortedData);

 

直接插入排序法原理及其js實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.