菜鳥學習歷程 15 1 直接插入排序

2021-08-11 16:26:53 字數 1606 閱讀 4637

排序就是按照遞增或者遞減的次序整理檔案中的記錄。

排序分為穩定排序和不穩定排序,什麼是穩定,什麼又是不穩定?

例如:3 15 8 8 6 9

在上述6個數字中的排序過程中,如果將兩個8的位置交換過,那麼就稱為不穩定排序,否則就是穩定排序。

換言之,在某個序列的排序過程中,如果對數值相等的資料進行過交換,那麼這種排序就被稱為不穩定排序,否則就是穩定排序。

排序演算法的效能分析:

演算法複雜度:演算法複雜度分為時間和空間上;

時間複雜度:指程式迴圈執行總的次數,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。

空間複雜度:執行該演算法占用多少空間資源。

輔助空間:指除了存放待排序資源之外,執行演算法所需要的其他儲存空間。

排序大致可以分為以下八種:

1.直接插入排序;

2.希爾排序;

3.快速排序;

4.氣泡排序;

5.簡單選擇排序;

6.堆排序;

7.歸併排序;

8. 基數排序。

8種排序的穩定性及複雜度,將在最後乙個排序內容裡一起介紹。

下面,我們對上述8種排序一一進行講解說明:

分析:直接插入排序,是先假定序列第乙個數按順序排列,從第2個數開始,與之前的所有數一一進行比較,如果前面的數小於自身,那麼就交換位置。通過下面的圖示結合講解,我想大家對於直接插入排序會有一定的認識。

第一次遍歷,將第2個數與第乙個數進行比較,發現小於第乙個數,於是交換位置

第二次遍歷,將第三個數與第二個數相比較,發現不小於它,於是不再繼續往前遍歷,結束本輪遍歷

第三次,將第四個數依次與前面的數相比較,發現比它大的,就將大數放在其後乙個位置上,繼續向前遍歷,往後挪位置的過程,其實就是為tmp空出位置

按照這樣的方式,直到遍歷到最後個元素,直接插入排序就完成了。

下面附上**:

#include 

void insertsort(int arr, int len)

else

}arr[j+1] = tmp; //為什麼最後將tmp的值放在對應的位置呢,而不是找到乙個比它小的就交換?

//每次遍歷時,前面的所有數字已經是乙個有序序列,如果i前面數j比它大,先將j

} //放在i的位置,在繼續向前找,又發現比它大的k,再將k放在j原來的位置,直到最後

}int main()

; length = sizeof(a) / sizeof(a[0]);

insertsort(a, length);

for(i = 0; i < length; i++)

return

0;

}

直接插入排序 學習筆記 詳解直接插入排序

直接插入排序 straight insertion sort 是一種簡單的排序方法,是一種插入類排序。其基本操作是將一條記錄插入到已排好的有序表中,從而得到乙個新的 記錄數量增1的有序表。將乙個記錄插入到已排好序的序列中,從而得到乙個新的有序序列 將序列的第乙個資料看成是乙個有序的子串行,然後從第二...

直接插入排序學習

直接插入排序 1 從未排序的第乙個元素開始,和前乙個已排好序的元素相比較,如果小於前乙個元素就交換位置,並繼續與前乙個元素比較,大於則跳出當前這一層的迴圈,這樣當前元素與原來已排好序的元素,組成乙個新的已經排好序的序列 原陣列包含 0 i 已排好序的序列與 i lenght 1 未排好序的序列 第乙...

直接插入排序

直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...