經典演算法學習 直接插入排序

2021-07-09 20:08:25 字數 1224 閱讀 7576

直接插入排序也是比較簡單的排序,基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。示例**上傳至具體描述如下:

設陣列為a[0...n-1],

(1)初始時,a[0]自成為乙個有序區,無序區為a[1...n-1]. 令i=1;

(2)將a[i]併入到當前的有序區a[0...i-1]中形成a[0...i]的有序區間;

(3)i++並重複(2),直到i==n-1,排序完成。

//

// main.c

// insertsort

//// created by chenyufeng on 16/2/3.

//#include void insertsort(int *a,int n);

void insertsort02(int *a,int n);

int main(int argc, const char * argv) ;

insertsort(a,6);

for (int i = 0; i < 6; i++)

return 0;

}//插入演算法1

void insertsort(int *a,int n)

}//找到該位置

if (j != i - 1)

//放在正確的位置上

a[k + 1] = temp;}}

}

上面實現的是比較基礎的,也有人實現了重寫。將搜尋和資料後移這兩個步驟合併。即每次a[i]先和前面乙個資料a[i-1]比較,如果a[i]>a[i-1]說明a[0...i]也是有序的,無需調整。否則就令j=i-1,temp = a[i].然後一邊將資料a[j]向後移動一邊向前搜尋,當有資料a[j]void insertsort(int *a,int n);

void insertsort02(int *a,int n);

int main(int argc, const char * argv) ;

insertsort02(a,6);

for (int i = 0; i < 6; i++)

return 0;

}//插入演算法2

void insertsort02(int *a,int n)

a[j + 1] = temp;}}

}說明一下,直接插入排序時間複雜度為o(n^2),空間複雜度為o(1).是一種穩定的排序。

本文參考:

經典演算法之直接插入排序

1 演算法思想 把待排序的元素插入已經排序的序列中。取第乙個元素為有序序列。從剩下的元素中依次取值和相鄰的元素作比較,找到合適的位置並插入。直至所有待排序的元素為有序序列。2 實現 1 coding utf 8 2def inert sort lst 3for i in range 1,len ls...

Java演算法學習之路 直接插入排序

直接插入排序演算法思路是 待排序記錄 r1,r2,rn 1,rn 第一步 將無序表打第乙個元素作為乙個有序表。第二步 將r2加入到有序表中,使有序表依舊有序 第 n 步 r1,r2,rn 1 rn 以此類推。直接插入排序演算法的時間複雜度,最好的情況是待排序記錄是有序的,o n 最壞打情況是記錄從大...

直接插入排序 學習筆記 詳解直接插入排序

直接插入排序 straight insertion sort 是一種簡單的排序方法,是一種插入類排序。其基本操作是將一條記錄插入到已排好的有序表中,從而得到乙個新的 記錄數量增1的有序表。將乙個記錄插入到已排好序的序列中,從而得到乙個新的有序序列 將序列的第乙個資料看成是乙個有序的子串行,然後從第二...