直接插入排序

2022-05-13 00:57:07 字數 1496 閱讀 3358

直接插入排序簡稱插入排序,對於少量元素的排序,它是乙個有效的演算法。插入排序是一種最簡單的排序方法,它的基本思想是將乙個記錄插入

到已經排好序的有序表中,從而得到乙個新的、記錄數增1的有序表。在其實現過程中使用雙層迴圈,外層迴圈對除了第乙個元素之外的所有元素,

內層迴圈對當前元素前面有序表進行待插入位置查詢,並進行移動。下面通過乙個例子來形象的介紹一下插入排序的原理。

在我們打牌的時候,起初我們的左手為空並且桌子上的牌面向下。然後,我們每次從桌子上拿走一張牌並將它插入左手中正確的位置。為了找到一

張牌的正確位置,我們從右到左將它與已在手中的每張牌進行比較。拿在左手上的牌總是排序好的,原來這些牌是桌子上牌堆中頂部的牌。

下面上一張圖來展示一下

接下來用**展示一下

1 #include2

using

namespace

std;34

void insertsort(int a,int n) //

插入排序;公升序排列519

else

//此時有序表中j所指的數不大於待插入元素,結束查詢

20break;21

}22if(flag==true) //

找到待插入位置了,可以插入

23 a[j+1]=tem;

24 cout<

次待插入的資料是:

"25 cout<

此時有序表中的資料位:";

26for(j=0;j<=i;j++)

27 cout

28 cout<

2930}31

}32intmain()33;

35 insertsort(a,10

);36 cout<

執行插入排序後陣列為:";

37for(int i=0;i<10;i++)

38 cout

39return0;

40 }

寫的比較詳細,測試結果如下:

下面說一下時間複雜度和空間複雜度:

空間複雜度:由於排序過程中只用到了乙個輔助空間,所以為空間複雜度位為 o(1)

時間複雜度:在進行排列時,最好的情況是序列已經是有序(公升序或降序)的了,比較次數為(n-1)次;最壞的情況為序列是反有序(降序或公升序),比較次數(n-1)*n/2,

基本操作執行(n-1)*n/2 + (n-1)次。所以演算法平均的時間複雜度為o(n

2)。另外,在資料量很大的時候,插入排序就不再適用了,它只適用於資料量較小的情況。

直接插入排序

直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...

直接插入排序

直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...

直接插入排序

源文章url http student.zjzk.cn course ware data structure web paixu paixu8.2.1.1.htm 做過部分修改。1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至...