每次將乙個待排序的記錄按其關鍵字的大小插到前面已經排序的序列中的適當位置,直到全部記錄插入完畢為止。
第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個資料與前兩個數從後向前掃瞄,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃瞄以後就完成了整個排序過程。
將待插入記錄r[i]的關鍵字從右向左依次與有序區中記錄r[j](j=i-1,i-2,…,1)的關鍵字進行比較:
① 若r[j]的關鍵字大於r[i]的關鍵字,則將r[j]後移乙個位置;
②若r[j]的關鍵字小於或等於r[i]的關鍵字,則查詢過程結束,j+1即為r[i]的插入位置。
關鍵字比r[i]的關鍵字大的記錄均已後移,所以j+1的位置已經騰空,只要將r[i]直接插入此位置即可完成一趟直接插入排序。
排序前 45 36 77 55 42 45 98 66
第一趟 36 77 55 42 45 98 66
第二趟 77 55 42 45 98 66
第三趟 55 42 45 98 66
第四趟 42 45 98 66
第五趟 45 98 66
第六趟 98 66
第七趟 66
第八趟
#includeusing namespace std;
void straightinsertsort(int arr)
straightinsertsort(arr);
cout<<"直接插入排序後序列為:"<
直接插入排序演算法
直接插入演算法 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序演算法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複...
直接插入排序演算法
撲克牌是我們幾乎每個人都可能從事過的遊戲。而最基本的撲克玩法都是一邊摸牌,一邊理牌。假如我們拿到了這樣一手牌,如圖9 5 1。啊,似乎是同花順呀,別急,我們得理一理順序才知道是否是真的同花順。請問,如果是你,應該如何理牌呢?應該說,哪怕你是第一次玩撲克牌,只要認識這些數字,理牌的方法都是不用教的。將...
演算法 直接插入排序
一 總體思想 將乙個記錄直接插入到乙個已經排序好的列表中的對應位置,形成乙個新的列表。直接插入排序為穩定排序。二 排序過程 公升序 1 認為第乙個記錄為有序列表。2 從第二個記錄開始,依次和已經排序的列表中記錄做比較,如果被比較記錄大於該記錄,則將被比較記錄後移一位,否則將該記錄插入到不大於它的記錄...