1、最切合實際的例子
在我們生活中,常見的撲克牌就是乙個很好的例子。正常人抓牌通常都是如下的幾個步驟:
抓取第一張排放在手中;
抓取第二張牌與第一張做比較,如果比第一張大則放在左邊,反之,右邊。(放在哪邊是個人習慣務必較真)
抓取第三張先與第一張比較,大左小右;再與第二張比較,大左小右。
重複抓取並迴圈比較,直到牌抓完。(實際人類不會每次都去一次次地去比較,再去插入)
2、插入排序
示例:5、3、1、2、4(亂序數)——>1、2、3、4、5(有序數)
第一趟——>5作為有序數放在arr[0]——5、3、1、2、4
第二趟——>3與5比較,放在arr[0],5左移——3、5、1、2、4
第三趟——>1先如5比較,1與5交換;1再與3比較,1與·3交換——1、3、5、2、4
第四趟——>2先與5比較,2與5交換;2與3比較,2與3交換;2與1比較,不必交換——1、2、3、5、4
第五趟——>4先與5比較,4與5交換;4再與3比較,不必交換;比較停止——1、2、3、4、5
3、演算法分析
**塊:
templatevoid insertionsort(t arr,int n)
}}
4、效能測試(函式寫在sorttesthelper.h標頭檔案中,作為自定義函式呼叫)
(1)、函式時間的測試
//函式時間測試
templatevoid timetestsort(string sortname, void(*sort)(t, int), t arr, int n)
(2)、驗證函式排序的正確性
//驗證函式排序的正確性
templatebool issorted(t arr, int n)
return true;
}
(3)、函式的複製
//函式的複製
int* copyintarray(int a,int n)
};
主函式呼叫
int main()
執行結果:
結果很顯然插入排序的時間遠大於選擇排序演算法。那麼能找到更加優化的插入排序演算法嗎?
修煉內功 資料結構與演算法9 插入排序
插入排序的原理我們將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素。插入演算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,並保證已排序區間資料一直有序。重複這個過程,直到未排序區間中元素為空,演算法結束。插入排序實現...
修煉演算法內功 選擇排序(一)
內容 1 簡單的選擇排序 2 使用模板 泛型 使演算法更加靈活 3 使用結構體完成學生的name和score屬性的排序 4 隨機生成演算法測試用例。寫在前面 為什麼學習o n 2 的排序演算法?基礎 1 selection sort 選擇排序 基本思路 如 8 6 2 3 1 5 7 4 對乙個序列...
內功修煉之O n 的排序演算法(一)
本文參考程式設計師內功修煉課程,所有實現 均能在github上找到。一 選擇排序 selection sort 1 基本思想 給定陣列int arr 第 1趟排序,在待排序資料arr 1 arr n 中選出最小的 資料,將它與arr 1 交換 第 2趟,在待排序 資料arr 2 arr n 中選出最...