排序1:插入排序(以從小到大排序為例)
重點關注各種排序時間複雜度,空間複雜度,已經有序的時間空間複雜度,穩定性的對比
1.1原理:
(舉例說明更清晰)
設原資料: 5 9 4 7 2
//移動後面資料
for(int k=i-
1;k>=j;k--)
//插入資料
arr[j]
= tmp;
}}1.3評價
①.時間複雜度:o(n^2),空間複雜度o(1)
②當原資料本身有序時,該排序時間複雜度o(n^2),空間複雜度o(1)
③穩定性:穩定性指的是原資料中若有相同資料,排序後相同資料的順序不變(沒有交換位置)本排序方法不穩定
1.4根據評價改進
(改進後即為插入排序的演算法,寫改進前的演算法,一方面是為了理解插入排序法的**,另一方面是為了理解為什麼比較資料需要從後往前,因為我們常用思維是從前往後比較)
找位置比較時從前往後改為從後往前 ,時間複雜度可提公升至o(n)而且從後往前,在比較大小同時可以移動資料,**改為:
//從後往前找位置同時移動資料
for( i=
1;i)else
//否則arr[j]>tmp需要移動資料
//插入資料
arr[j+1]
=tmp;
}}
1.5改進後評價(對插入排序法的評價)
①時間複雜度:o(n^2),空間複雜度o(1)
②已經有序。時間複雜度:o(n),空間複雜度o(1),則插入排序越有序
③本演算法穩定。
注1:穩定性是指本排序方法可以達到穩定,而不是個人因**寫得有差異導致沒達到穩定狀態。
如:以上**if(arr[j]<=tmp寫為if(arr[j]注2:判斷穩定性的根本方法為:是否有跳躍式的交換資料,因為跳躍交換無法確定相同關鍵字是否交換。可能相同的數字被跳過去也可能沒跳。如: 5 4 2 7將5和2交換為跳躍式交換。
排序1 插入排序
讓我們開始排序的學習吧,首先我們先理解一下插入排序的基本思想 每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,知道所有待排序記錄全部插入為止。這個可能會和選擇排相似,但是那個是設定最大或最小,然後依次找到最大或最小插入到特定位置,而選擇依次比較後移或前移,不要混淆哦...
1)插入排序
直接插入排序的理解 來自維基百科 一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等...
1 插入排序
本來是想對插入排序做乙個詳細的說明 從演算法原理 演算法優劣 演算法實現一一說起。但是要將演算法原理說的通俗易懂,不是個簡單的事情,常常需要很好的文筆和配上詳細的圖。但是最近需要複習準備面試,確實沒什麼時間去寫一系列完整地說明演算法的部落格,所以這次就只是寫下演算法實現 c 的細節和詳細注釋,找到新...