好久沒看演算法了,真的見題就模糊了—555 今天記錄一下吧
插入排序的基本思想是:將陣列的第乙個數認為是有序陣列,從後往前(從前往後)掃瞄該有序陣列,把陣列中其餘n-1個數,根據數值的大小,插入到有序陣列中,直至陣列中的所有數有序排列為止。這樣的話,n個元素需要進行n-1趟排序!!!
舉個例子:4個數字4,6,7,5進行從大到小的排序。前插排序法具體過程如下:
把第乙個數4插入到空的有序陣列中的第乙個位置上,得到新數字序列4;
第一趟:從後往前掃瞄有序陣列,將第二個數字6和有序陣列中的4進行比較,6大於4,此時將4後移乙個位置。此時已經掃瞄完有序陣列中的數,將6插入到4的前面(有序陣列的第乙個位置),得到新數字序列6,4;
第二趟:從後往前掃瞄有序陣列,先將第三個數字7和有序陣列中的4進行比較,7大於4,此時將4後移乙個位置;再將7和有序陣列中的6進行比較,7大於6,此時將6後移乙個位置。此時已經掃瞄完有序陣列中的數,將7插入到6的前面(有序陣列的第乙個位置),得到新數字序列7,6,4;
第三趟:從後往前掃瞄有序陣列,先將第四個數字5和有序陣列中的4進行比較,5大於4,此時將4後移乙個位置;再將5和有序陣列中的6進行比較,5小於6,由於有序陣列就按照從大到小排列的,此時直接把5插入到4的前面即可!不需要再和7進行比較!最後,得到新數字序列7,6,5,4;
插入排序的關鍵點:
1、採用雙層迴圈:時間複雜度也是o(n的平方)
(1)外層迴圈表示的是排序的趟數,n個數字需要n-1趟,因此,外層迴圈的次數是n-1次;同時也代表數的位置。
(2)內層迴圈表示的是每一趟排序的數字。根據插入排序的思想,第i趟排序時,有序陣列中的數字就有i個,就需要進行i次比較,因此迴圈i次。注意採用的是從後往前進行比較。
2、從後往前掃瞄的時候,如果必須插入的數大於有序陣列中當前位置的數,則有序陣列中的數和它之後的數均往後移乙個位置,否則,把插入的數插入到有序陣列中。(穩定排序)
插入排序演算法
插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第n個元素與前n 1個元素進行比較並將其插入合適位置。演算法 建立日期 2004 12 14 插...
演算法 插入排序
include include 插入排序 n 2為的效率。具體思想 將陣列分為兩部分,一部分是有序的,一部分為無序的 然後從無序中選取乙個數插入在有序的數中的恰當的位置,以此迭代,直到無序的數全部遍厲完畢 void insert sort int a,int n a j tmp break retu...
插入排序演算法
下面這段話摘自 一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將...