数据结构之直接插入排序图文详解及代码(C++实现)
生活随笔
收集整理的這篇文章主要介紹了
数据结构之直接插入排序图文详解及代码(C++实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:
對待排序的數組r[1..n]中的元素進行直接插入排序,得到一個有序的(從小到大)的數組r[1..n]。
算法思想:
1、設待排序的記錄存放在數組r[1..n]中,r[1]是一個有序序列。
2、循環n-1次,每次使用順序查找法,查找r[i](i=2,..,n)在已排好的序列r[1..i-1]中的插入位置,然后將r[i]插入表長為i-1的序列r[1..i-1],直到將r[n]插入表長為n-1的有序序列r[1..n-1],最后得到一個表長為n的有序序列。
圖解:
代碼:
#include<iostream> using namespace std; #define MAXSIZE 20//順序表的最大長度 typedef int KeyType;//定義關鍵字類型為整型 typedef int InfoType; typedef struct {KeyType key;//關鍵字項InfoType otherinfo;//其他數據項 }RedType; typedef struct {RedType r[MAXSIZE+1];//r[0]閑置或做哨兵單元int length;//順序表的長度 }SqList;//順序表類型void InsertSort(SqList &L)//對順序表L做直接插入排序 {for(int i=2;i<=L.length;i++)if(L.r[i].key<L.r[i-1].key)//"<",需將r[i]存入有序字表{L.r[0]=L.r[i];//將待插入的記錄暫存到監視哨中L.r[i]=L.r[i-1];//r[i-1]后移int j;for(j=i-2;L.r[0].key<L.r[j].key;--j)//從后向前尋找插入位置L.r[j+1]=L.r[j];//記錄逐個后移,直到找到插入位置L.r[j+1]=L.r[0];//將r[0]即原r[i],正確位置插入到}//if }int main() {SqList L;for(int i=1;i<=10;i++)L.r[i].key=11-i;L.length=10;for(int i=1;i<=L.length;i++)cout<<L.r[i].key<<" ";cout<<endl;InsertSort(L);for(int i=1;i<=L.length;i++)cout<<L.r[i].key<<" ";cout<<endl;return 0; }運行結果:
?
總結
以上是生活随笔為你收集整理的数据结构之直接插入排序图文详解及代码(C++实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ(六)整合SpringB
- 下一篇: 数据结构之折半插入排序图文详解及代码(C