排序就是按照遞增或者遞減的次序整理檔案中的記錄。
排序分為穩定排序和不穩定排序,什麼是穩定,什麼又是不穩定?
例如: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開始...