資料結構與演算法 (四) 插入排序
阿新 • • 發佈:2018-12-27
1.演算法思想
插入排序的思想是每次選擇排序的記錄序列的第1個記錄,按照排序碼的大小將其插入已排序的記錄序列中的適當位置,直到所有記錄全部排序完畢
2.演算法原理
先將第1個記錄視為一個有序的記錄序列,然後從第2個記錄開始,依次將未排序的記錄插入這個有序的記錄序列中,直到整個檔案中的全部記錄排序完畢,在排序過程中,前面的記錄序列是已經排好序的,而後面的記錄序列有待排序處理
3.演算法實現
sort.h
typedef int ElementType; struct forSort { ElementType key; }; typedef struct forSort ForSort; void InitForSort(ForSort *FS,int a) { FS->key=a; }
main.c
#include <stdio.h> #include <stdlib.h> #include "sort.h" void DirectInsertionSort(ForSort A[],int n) { int i,j; ForSort temp; for(i=1; i<n; i++) { j=i; temp= A[i]; //此處判斷temp 是否比j-1小 如果比temp.key大 向前移動檔案 空出 j 這個位置 while(j>0 && temp.key<A[j-1].key) { A[j]=A[j-i]; j--; } //將空出j 的位置的值加入檔案 由此看出插入排序是穩定排序 A[j]=temp; } } int main(){ int i; int A[8]={28,13,72,85,39,41,6,20}; DirectInsertionSort(A,8); for(i=0;i<8;i++){ printf("%d\n",A[i]); } return 1; } //時間複雜度 是總的比較次數是 n(n-1)/2 時間複雜度為O(n^)