插入排序的JavaScript實現

來源:互聯網
上載者:User

標籤:asc   stdio.h   空間複雜度   儲存   int   value   從後往前   std   插入   

思想

每次在現有已經排好的數組的基礎上排入一個新的數組項。

  • 先把第一項看做是已經排好的,第二項應該排在第一項之前還是之後呢?當前兩項排好後,第三項應該排在這已排好的兩項的之前還是之後還是中間呢?當前三項排好後,第四項應該排在這已排好的三項中的什麼位置呢?...以此類推。
  • 在把新的一項排入已排好的數組項中時,將已排好的項從後往前依次與新的一項比較,如果比新的一項大,那麼就依次往後挪一個位置...直到找到小於等於新的一項的數組項的位置,將新的一項排在該位置後面(由於後面的數組項都往後挪了一個位置,故這裡剛好有一個空位置)即可。
代碼
function insertionSort(arr) {  const len = arr.length;  for (let i = 1; i < len; i++) { //在arr[0,...,i-1]中插入arr[i]    const toInsertValue = arr[i];    let j;    for (j = i; j >0 && arr[j-1] > toInsertValue; j--) { //找到一個比arr[i]大的項,就把這個項往後挪一項。因為最後一項就是toInsertValue,所以該值一直可以通過toInsertValue訪問,故也不必另做儲存。      arr[j] = arr[j-1];    }    arr[j] = toInsertValue;//內迴圈結束得到的arr[j-1]是第一個比arr[i]小的值,那麼就把arr[i]儲存在此處的arr[j]上。而之前的arr[j]已經在上一輪迴圈中儲存到了arr[j+1]中      }}
效能分析
  • 時間複雜度:最好O(n),平均、最壞O(n^2) (但是小型數組排序時,其效能要比冒泡和選擇排序好)
  • 空間複雜度: O(1), 穩定
延伸:對比C語音的插入排序
#include<stdio.h>#include<stdlib.h>void insertion(int *list,int n){    int i,j,t;    for(i=1;i<n;i++)//待插入的是list[1]到list[n-1]    {        if(list[i]<list[i-1])        {            t=list[i];            list[i]=list[i-1];            j=i;            while(t<list[j-1]&&j>=1)            {                list[j]=list[j-1];                j--;            }            list[j]=t;          }        }}main(){    int list[10],n=10,i;    printf("請輸入10個整數:\n");    for(i=0;i<10;i++)    {        scanf("%d",&list[i]);    }    insertion(list,10);    for(i=0;i<10;i++)    {        printf("%d\t",list[i]);    }    system("pause");}

插入排序的JavaScript實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.