最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript十大排序算法插入排序?qū)崿F(xiàn)示例詳解

 更新時間:2023年02月23日 09:56:24   作者:coderwhy  
這篇文章主要為大家介紹了TypeScript十大排序算法插入排序?qū)崿F(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一. 插入排序的定義

插入排序就像是你打撲克牌,你從牌堆頂取一張牌,找到合適的位置插入到已有牌的順序中,并不斷重復這一步驟直到所有的牌都被 插入到合適的位置,最終使得整副牌有序。

與打牌類似,插入排序(Insertion sort)的實現(xiàn)方法是:

  • 首先假設第一個數(shù)據(jù)是已經(jīng)排好序的,接著取出下一個數(shù)據(jù),在已經(jīng)排好序的數(shù)據(jù)中從后往前掃描,找到比它小的數(shù)的位置,將該位置之后的數(shù)整體后移一個單位,然后再將該數(shù)插入到該位置。
  • 不斷重復上述操作,直到所有的數(shù)據(jù)都插入到已經(jīng)排好序的數(shù)據(jù)中,排序完成。

插入排序的優(yōu)勢在于它的性能表現(xiàn)在已經(jīng)有序的序列上比冒泡排序、選擇排序兩種算法要好。

  • 它的時間復雜度為O(n),因此,如果序列已經(jīng)被排好,插入排序?qū)让芭菖判蚝瓦x擇排序快得多。
  • 另外,插入排序空間復雜度為O(1),因此,對于內(nèi)存限制較小的情況,插入排序也是一個更優(yōu)的選擇。

二. 插入排序的流程

插入排序的流程如下:

  • 首先,假設數(shù)組的第一個元素已經(jīng)排好序了,因為它只有一個元素,所以可以認為是有序的。
  • 然后,從第二個元素開始,不斷與前面的有序數(shù)組元素進行比較。
  • 如果當前元素小于前面的有序數(shù)組元素,則把當前元素插入到前面的合適位置。
  • 否則,繼續(xù)與前面的有序數(shù)組元素進行比較。
  • 以此類推,直到整個數(shù)組都有序。
  • 循環(huán)步驟2~5,直到最后一個元素。
  • 完成排序。

三. 插入排序的圖解

四. 插入排序的代碼

以下是 TypeScript 實現(xiàn)的插入排序代碼,帶有詳細的注釋:

function insertionSort(arr: number[]): number[] {
  // 對于數(shù)組的每一個元素,從它開始到0位置,比較該元素和前一個元素的大小
  for (let i = 1; i < arr.length; i++) {
    let current = arr[i];
    let j = i - 1;
    // 如果該元素小于前一個元素,那么前一個元素向后移動,并繼續(xù)向前比較
    while (j >= 0 && arr[j] > current) {
      arr[j + 1] = arr[j];
      j--;
    }
    // 如果該元素大于前一個元素,那么它將放到合適的位置
    arr[j + 1] = current;
  }
  // 返回排序后的數(shù)組
  return arr;
}
// 測試數(shù)據(jù)
const testArr = [5, 2, 9, 1, 5, 6];
// 調(diào)用插入排序函數(shù)
const sortedArr = insertionSort(testArr);
// 打印結(jié)果
console.log(sortedArr);

代碼執(zhí)行的過程:

  • 首先我們定義了一個 insertSort 函數(shù),并傳入一個數(shù)字數(shù)組作為參數(shù)。
  • 接著我們定義一個變量 current,它將存儲當前需要比較的數(shù)字。
  • 然后我們使用一個循環(huán),將數(shù)組的第二項到最后一項依次與前面的數(shù)字進行比較。
  • 在內(nèi)層循環(huán)中,我們首先將 j 定義為 i-1,然后每次執(zhí)行循環(huán)時,如果 j 大于等于 0 并且 arr[j] 大于 current,我們就交換 arr[j]arr[j + 1] 的值。
  • 在循環(huán)結(jié)束后,我們將 current 插入到正確的位置,并繼續(xù)比較下一個數(shù)字。
  • 當所有數(shù)字都被比較過后,我們就可以返回最終排序好的數(shù)組。

五. 插入排序的時間復雜度

插入排序的時間復雜度在最好的情況下為O(n),在最壞的情況下為O(n^2),平均時間復雜度為O(n^2)。

當數(shù)據(jù)已經(jīng)有序時,插入排序只需要做n-1次比較和0次移動,運行時間為O(n);

當數(shù)據(jù)完全逆序時,插入排序需要做n-1趟比較和3/2*(n-1)^2/2次移動,運行時間為O(n^2)。

由于插入排序的最好時間復雜度與最壞時間復雜度都接近O(n^2),所以插入排序適用于數(shù)據(jù)規(guī)模不大的場合,如果數(shù)據(jù)規(guī)模很大,通常使用其他算法。

六. 插入排序的總結(jié)

  • 插入排序是一種簡單而直觀的排序算法,它可以快速地對部分有序的數(shù)組進行排序。
  • 插入排序通過比較相鄰的元素并在需要時將其交換,來實現(xiàn)從小到大的排列。
  • 插入排序的時間復雜度在最好情況下是線性O(n),最壞情況下是O(n^2)。

總而言之,如果數(shù)組部分有序,插入排序可以比冒泡排序和選擇排序更快。

  • 但是如果數(shù)組完全逆序,則插入排序的時間復雜度比較高,不如快速排序或歸并排序。
  • 因此,在選擇排序算法時,應該根據(jù)需要選擇合適的算法。

以上就是TypeScript十大排序算法插入排序?qū)崿F(xiàn)示例詳解的詳細內(nèi)容,更多關(guān)于TypeScript插入排序算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Typescript tsconfig.json的配置詳情

    Typescript tsconfig.json的配置詳情

    這篇文章主要為大家介紹了Typescript tsconfig.json的配置詳情示例 ,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • typescript在vue中的入門案例代碼demo

    typescript在vue中的入門案例代碼demo

    這篇文章主要介紹了typescript在vue中的入門案例代碼demo,使用技術(shù)棧vue2+typescript+scss入門練手項目,天氣預報demo,需要的朋友可以參考下。
    2022-12-12
  • TypeScript?類型級別示例介紹

    TypeScript?類型級別示例介紹

    這篇文章主要為大家介紹了TypeScript?類型級別示例介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Typescript編碼規(guī)范ESLint和Prettier使用示例詳解

    Typescript編碼規(guī)范ESLint和Prettier使用示例詳解

    這篇文章主要介紹了Typescript編碼規(guī)范ESLint和Prettier使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • TypeScript類型級別和值級別示例詳解

    TypeScript類型級別和值級別示例詳解

    這篇文章主要為大家介紹了TypeScript類型級別和值級別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • TS報錯Cannot?find?module?'xxx'?or?its?corresponding?type?declarations解決

    TS報錯Cannot?find?module?'xxx'?or?its?correspo

    這篇文章主要為大家介紹了TS報錯Cannot?find?module?'xxx'?or?its?corresponding?type?declarations解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • TypeScript防抖節(jié)流函數(shù)示例詳解

    TypeScript防抖節(jié)流函數(shù)示例詳解

    這篇文章主要為大家介紹了TypeScript防抖節(jié)流函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試

    TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試

    這篇文章主要為大家介紹了TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • TypeScript使用noImplicitAny實戰(zhàn)解析

    TypeScript使用noImplicitAny實戰(zhàn)解析

    這篇文章主要為大家介紹了TypeScript使用noImplicitAny實戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • PureScript與JavaScript中equality設計的使用對比分析

    PureScript與JavaScript中equality設計的使用對比分析

    這篇文章主要為大家介紹了PureScript中的equality與JavaScript中的equality設計對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論

开化县| 礼泉县| 裕民县| 咸丰县| 南宫市| 宁夏| 平阴县| 石门县| 治多县| 秦皇岛市| 栾城县| 波密县| 青龙| 大厂| 蕉岭县| 新田县| 邵阳县| 清远市| 赤水市| 平远县| 涿鹿县| 夹江县| 建昌县| 宣汉县| 乌拉特中旗| 洪湖市| 青田县| 璧山县| 伊川县| 曲沃县| 电白县| 常熟市| 汶川县| 弋阳县| 安岳县| 临夏市| 湖南省| 金川县| 杂多县| 肃北| 远安县|