插入法排序c语言程序,插入排序算法及C语言实现
插入排序算法是所有排序方法中最簡單的一種算法,其主要的實現思想是將數據按照一定的順序一個一個的插入到有序的表中,最終得到的序列就是已經排序好的數據。
直接插入排序是插入排序算法中的一種,采用的方法是:在添加新的記錄時,使用順序查找的方式找到其要插入的位置,然后將新記錄插入。
很多初學者所說的插入排序,實際上指的就是直接插入排序算法,插入排序算法還包括2-路插入排序,表插入排序和
例如采用直接插入排序算法將無序表{3,1,7,5,2,4,9,6}進行升序排序的過程為:
首先考慮記錄 3 ,由于插入排序剛開始,有序表中沒有任何記錄,所以 3 可以直接添加到有序表中,則有序表和無序表可以如圖 1 所示:
圖 1 直接插入排序(1)
向有序表中插入記錄 1 時,同有序表中記錄 3 進行比較,1<3,所以插入到記錄 3 的左側,如圖 2 所示:
圖 2 直接插入排序(2)
向有序表插入記錄 7 時,同有序表中記錄 3 進行比較,3<7,所以插入到記錄 3 的右側,如圖 3 所示:
圖 3 直接插入排序(3)
向有序表中插入記錄 5 時,同有序表中記錄 7 進行比較,5<7,同時 5>3,所以插入到 3 和 7 中間,如圖 4 所示:
圖 4 直接插入排序(4)
向有序表插入記錄 2 時,同有序表中記錄 7進行比較,2<7,再同 5,3,1分別進行比較,最終確定 2 位于 1 和 3 中間,如圖 5 所示:
圖 5 直接插入排序(5)
照此規律,依次將無序表中的記錄 4,9 和 6插入到有序表中,如圖 6 所示:
圖 6 依次插入記錄4,9和6
直接插入排序的具體代碼實現為:
#include
//自定義的輸出函數
void print(int a[], int n ,int i){
printf("%d:",i);
for(int j=0; j<8; j++){
printf("%d",a[j]);
}
printf("\n");
}
//直接插入排序函數
void InsertSort(int a[], int n)
{
for(int i= 1; i
if(a[i] < a[i-1]){//若第 i 個元素大于 i-1 元素則直接插入;反之,需要找到適當的插入位置后在插入。
int j= i-1;
int x = a[i];
while(j>-1 && x < a[j]){ //采用順序查找方式找到插入的位置,在查找的同時,將數組中的元素進行后移操作,給插入元素騰出空間
a[j+1] = a[j];
j--;
}
a[j+1] = x; //插入到正確位置
}
print(a,n,i);//打印每次排序后的結果
}
}
int main(){
int a[8] = {3,1,7,5,2,4,9,6};
InsertSort(a,8);
return 0;
}
運行結果為:
1:13752496
2:13752496
3:13572496
4:12357496
5:12345796
6:12345796
7:12345679
直接插入排序算法本身比較簡潔,容易實現,該算法的時間復雜度為O(n2)。
插入排序的其它 4 種排序方法,在后序章節中有詳細介紹。
總結
以上是生活随笔為你收集整理的插入法排序c语言程序,插入排序算法及C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡不激活要收年费吗
- 下一篇: python3读取excel某一列_怎样