演算法 插入排序

2021-07-10 17:52:05 字數 1257 閱讀 4402

今天看了本書,叫《linux c 一站式學習》,上邊有講到插入排序的基本思想,於是,我就按照這個思想,回憶了以前的程式,把這個程式又實現了一遍。get 熟練度:(以下是書中介紹的抓撲克牌思想)

插入排序演算法類似於玩撲克時抓牌的過程,玩家每拿到一張牌都要插入到手中已有的牌裡,使之從 小到大排好序。例如(該圖出自[演算法導論]):

也許你沒有意識到,但其實你的思考過程是這樣的:現在抓到一張7,把它和手裡的牌從右到左依 次比較,7比10小,應該再往左插,7比5大,好,就插這裡。為什麼比較了10和5就可以確定7的位 置?為什麼不用再比較左邊的4和2呢?因為這裡有乙個重要的前提:手裡的牌已經是排好序的。現 在我插了7之後,手裡的牌仍然是排好序的,下次再抓到的牌還可以用這個方法插入。

程式設計對乙個陣列進行插入排序也是同樣道理,但和插入撲克牌有一點不同,不可能在兩個相鄰的存 儲單元之間再插入乙個單元,因此要將插入點之後的資料依次往後移動乙個單元。排序演算法如下:(下來就是我編寫的**了)

#include #include #define n 1000

/** 插入排序---非遞減

* 認為陣列中第一張牌是已經排好序的

*/void insert_sort(int *a, int num)

a[j + 1] = tmp; //將摸出來的牌放入正確的位置 }}

int main(void)

; int i = 0, data = 1000;

/*初始化待排陣列*/

for (i = 0; i < n; i++)

/*呼叫統一介面*/

insert_sort(arr, n);

/*列印到螢幕*/

for (i = 0; i < 1000; i++)

system("pause");

return 0;

}

掌握了摸牌的思想,你是不是發現這個程式其實不難呢?(注意:此**為windows下的**,其中 "pause" 命令屬於 dos ,想要在 linux 下執行,直接把system("pause"); 和它所屬的標頭檔案去掉就ok了,因為在 linux 裡邊我們用不到它!)

插入排序演算法

插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第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,直到找到已排序的元素小於或者等於新元素的位置 將...