C 實現直接插入排序

2021-09-28 16:50:58 字數 948 閱讀 2356

直接插入排序在生活中最好的體現就是玩撲克牌,我們理牌的方式是把3和4移動到5的左側,再拿到一張2,把2移到最左側,拿到一張10,放最後邊,再拿到一張7,插入5與10中間。這裡我們的理牌方法就是直接插入排序。

話不多說,直接上**,這裡一步步給出不同的寫法:

#include #include using namespace std;

// 直接插入排序

template void insertsort(t arr, int n)

}}

解釋一下,第一層迴圈,遍歷陣列元素,第二層拿到乙個元素arr[j],和前面的元素逐個比較(模擬,前面拿到了3,5牌,現在拿到了2,先與5比較),2<5, ok,交換2和5,把2插入到3與5之間,然後2與3比較,2<3, ok,2與3交換,此時2已經到了最左端,這是退出二層迴圈,拿下一張牌。

#include #include using namespace std;

template void insertsort(t arr, int n)

}}

這種寫法和寫法1道理上是一樣的,只是更加簡潔了。

#include #include using namespace std;

template void insertsort(t arr, int n)

arr[j] = e;

}}

寫法1和寫法2使用了swap函式,每次swap函式都會進行三次賦值操作,這會增加一定的開銷,這裡我們對演算法進行一些優化,再回到我們抓牌時理牌的場景,我們現在手上有3和5,又抓到了一張2,我們並不是先把2插到3與5之間,再抽出來插入到3前面,而是讓2先與5比較,2比5小,不急著換位置,再看2與3大小,2<3,此時左邊沒有比2小的,再把2插進去。我們的寫法3就是類似這種直觀操作。

c 實現直接插入排序

include includeusing namespace std define list init size 100 define listincrement 10 define elemtype int typedef structsqlist 建順序表 void initlist sq sq...

直接插入排序 C 實現

原理 插入排序的基本操作是 有序插入 也就是將元素逐一插到有序序列中,保持序列有序,從而使有序序列的長度不斷增加。對陣列a n 排序時,起初a 0 被認為是長度為1的有序子串行。然後,按照有序插入法,i從1到n 1迴圈地將a i 插入到有序序列中。在插入a i 前,陣列a的前半段 a 0 至a i ...

C 直接插入排序

設計思路 1.首先把乙個元素的第乙個數看作乙個有序的數列 2.定義乙個游動的下標,指向有序序列中的最後乙個元素 2.從有序序列後乙個元素開始,往前比較,如果待比較元素比前乙個元素小的話,額外用變數盛著待比較元素,前乙個元素後移一位 游標減減 此時權當游標 1的位置已經空出 大的話,游標加一的位置即要...