酷知百科網

位置:首頁 > 遊戲數碼 > 電腦

如何理解排序算法:[1]直接插入排序法

電腦1.26W

直接插入排序算法是排序算法中最簡單的,但在尋找插入位置時的效率不高。基本思想就是將一個待排序的數字在已經排序的序列中尋找找到一個插入位置進行插入。直接插入排序的算法重點在於尋找插入位置。

操作方法

(01)設定待排序的數據儲存在數組data[]中

如何理解排序算法:[1]直接插入排序法

(02)設定外層循環,即從第二個數據到最後一個數據。(只有一個數據則爲考慮爲已經是有序的,所以循環從第二個數據開始)其中n爲待排序數據的長度。

如何理解排序算法:[1]直接插入排序法 第2張

(03)定義一個用來臨時儲存將要進行插入操作的元素temp。

如何理解排序算法:[1]直接插入排序法 第3張

(04)編寫內層循環,尋找插入位置並移動元素。

如何理解排序算法:[1]直接插入排序法 第4張

(05)將tmp插入到尋找到的位置j+1

如何理解排序算法:[1]直接插入排序法 第5張

(06)最後附上全部執行代碼及執行截圖#include "stdafx.h"#include <iostream>using namespace std;template <class T>void outputArr(T&,int);int main(){int i, j;int data[] = { 23, 98, 7, 28, 92, 14, 89, 1 };//共8個數據int n = sizeof(data) / sizeof(data[0]);cout << "排序前的結果:n";outputArr(data, n);for ( i = 1; i < n;i++){int temp = data[i];for ( j = i - 1; j >= 0 && data[j]>temp;j--){data[j + 1] = data[j];}data[j + 1] = temp;}cout << "排序後的結果:n";outputArr(data, n);return 0;}template <class T>void outputArr(T &a,int n){for (int i = 0; i < n;i++){cout << a[i] << " ";}cout << endl;}

如何理解排序算法:[1]直接插入排序法 第6張

(07)可以透過引入哨兵來將算法改進,避免了邊界檢查。即將數組的第一個位置替換上面的temp臨時變量。

如何理解排序算法:[1]直接插入排序法 第7張
標籤:插入排序 算法