插入排序基本思想是每一步將乙個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素為止。
1. 時間複雜度:插入演算法,就是保證前面的序列是有序的,只需要把當前數插入前面的某乙個位置即可。所以如果陣列本來就是有序的,則陣列的最好情況下時間複雜度為o(n),如果陣列恰好是倒=倒序,比如原始陣列是5 4 3 2 1,想要排成從小到大,則每一趟前面的數都要往後移,一共要執行n-1 + n-2 + … + 2 + 1 = n * (n-1) / 2 = 0.5 * n2 - 0.5 * n次,去掉低次冪及係數,所以最壞情況下時間複雜度為o(n2),平均時間複雜度(n+n2 )/2,所以平均時間複雜度為o(n2)。
2. 空間複雜度:插入排序演算法,只需要兩個變數暫存當前數,以及下標,與n的大小無關,所以空間複雜度為:o(1)。
#include #include void insertsort(int arr, int length)
arr[j + 1] = key; }}
int main()
; int len = sizeof iarr / sizeof(iarr[0]);
printf("排序前:");
for (int i = 0; i < len; i++)
printf("\n排序後:");
八大排序演算法之插入排序
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀...
八大排序演算法之插入排序
排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。先上圖 我先從上往下挨個介紹 1 插入排序 插入排序時間複雜度最優為 o n 情況是陣列為已經排好的順序 最差為o n 2 情況為陣列為排好的逆序 平均...
八大排序 插入排序 直接插入排序
基本思想 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。直接插入排序示例 如果碰見乙個和插入元素相等的,那麼插入元素把想插入的...