1. 程式人生 > >資料結構與演算法 (四) 插入排序

資料結構與演算法 (四) 插入排序

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^)