最近在開始學習演算法,演算法入門一般是以排序演算法為主,而排序呢用的也是比較多,這兩天也是接觸了幾種常見的演算法,比如快速排序,直接插入排序,氣泡排序等。那這裡先介紹一下直接插入排序吧,呵呵,由於是第一次在csdn上發表文章,有寫的不好的地方還請見諒以及提出意見。
插入排序對少量元素進行排序比較有效,這種排序和我們平時玩撲克牌比較類似,從桌面上的牌堆一次摸一張牌,然後把這張牌插入到我們手上已摸的牌的乙個正確的位置上。為了找到這個正確位置,我們需要和已經排好順序的手牌進行比較,從最右邊的一張開始比較,如果摸起來的牌比這個手牌大,那麼放在這個手牌的最右邊,再繼續摸牌即可,否則我們再同這個手牌左邊的那種牌繼續比較,直到摸起來的牌找到正確的插入位置為止,再繼續摸牌。
具體的排序過程如下:現在有1個陣列a=需要排序(從小到大)。
陣列的長度是5(和陣列的下標不同),現在第1個元素肯定是排好順序的,我們可以把a分為2個部分,其中a為已經排好順序的陣列,而a'為a中還沒有排序的元素組成的陣列。每次從a'中取出1個元素插入a中,當a'為空時,排序完成。
第一次排序時,a=, a'= 用變數j來控制a中的第2個到最後元素的遍歷, for(index=1,index!=5;index++)
那麼第一次迴圈j=1,a[index]=7, 把這個值儲存到1個變數key中,
我們把他同他的前1個元素進行比較,那麼可以定義1個變數j=index-1,即該元素的前1個元素也就是a[0],如果j是大於等於0的(確保陣列不會越界)而且a[j]的值比key的大,那麼我們互換這2個元素的位置,a[j+1]=a[j](此時a[j]的值被覆蓋),然後把j-1,繼續同前1個值進行比較,直到前面這2個條件不滿足,由於最後做了次j--,那麼即使跳出迴圈了,此時a[j]指向的位置也是往前靠了1個的,我們插入的key值放的位置是在剛才的j--之前的那個元素,所以需要把key賦值給a[j+1],這樣完成這次的排序。
具體的**,如下:
void insertsort(int a,int lenth)
a[j+1]=key;
}}
進行測試:
void main()
; insertsort(a,8);
for(int index=0;index!=8;++index)
{ cout <
執行結果如圖:
插入排序C
變數 i 1.代表待插入數字的下標 preindex.代表前乙個元素的下標 length.代表陣列的長度 排序過程 arr 0 跳過,從arr 1 開始,每乙個數都和它前面的數字比較。while iarr i 那麼前大後小,亂序 arr preindex 1 current i include us...
c 插入排序
從整個待排序列中選出乙個元素插入到已經有序的子串行中去,得到乙個有序的 元素加一的子串行,直到整個序列的待插入元素為0,則整個序列全部有序。在實際的演算法中,我們經常選擇序列的第乙個元素作為有序序列 因為乙個元素肯定是有序的 我們逐漸將後面的元素插入到前面的有序序列中,直到整個序列有序。簡單插入排序...
C 插入排序
c 插入排序 開發工具與關鍵技術 c visualstudio插入排序和氣泡排序有一點相似,但是它們是完全不同的兩種排序方式,插入排序的方式是這樣的,例如有乙個三個元素的陣列排序順序是1,0,3我們是公升序排序方式,元素1我們不管它,元素0我們就拿出來和元素1比較這時元素0比元素1小,元素1往後移一...