데이터 구조 루틴 - 정렬 삽입 직접 정렬 삽입

본 고 는 [데이터 구조 기초 시리즈 (9): 정렬] 에서 2 교시 [정렬 을 삽입 하 는 직접 정렬 삽입] 의 예 이다.
1. 정렬 바로 삽입
#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //       
typedef char InfoType[10];
typedef struct          //    
{
    KeyType key;        //    
    InfoType data;      //     ,   InfoType
} RecType;              //         

void InsertSort(RecType R[],int n) // R[0..n-1]             
{
    int i,j;
    RecType tmp;
    for (i=1; i<n; i++)
    {
        tmp=R[i];
        j=i-1;            //        R[0..i-1]  R[i]     
        while (j>=0 && tmp.key<R[j].key)
        {
            R[j+1]=R[j]; //      R[i].key     
            j--;
        }
        R[j+1]=tmp;      // j+1   R[i]
    }
}

int main()
{
    int i,n=10;
    RecType R[MaxSize];
    KeyType a[]= {9,8,7,6,5,4,3,2,1,0};
    for (i=0; i<n; i++)
        R[i].key=a[i];
    printf("   :");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("
"
); InsertSort(R,n); printf(" :"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("
"
); return 0; }

2. 직접 삽입 정렬 과정 보이 기
#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //       
typedef char InfoType[10];
typedef struct          //    
{
    KeyType key;        //    
    InfoType data;      //     ,   InfoType
} RecType;              //         

void InsertSort(RecType R[],int n) // R[0..n-1]             
{
    int i,j,k;
    RecType tmp;
    for (i=1; i<n; i++)
    {
        tmp=R[i];
        j=i-1;            //        R[0..i-1]  R[i]     
        while (j>=0 && tmp.key<R[j].key)
        {
            R[j+1]=R[j]; //      R[i].key     
            j--;
        }
        R[j+1]=tmp;      // j+1   R[i]
        printf("i=%d: ",i);
        for (k=0; k<n; k++)
            printf("%d ",R[k].key);
        printf("
"
); } } int main() { int i,n=10; RecType R[MaxSize]; KeyType a[]= {9,8,7,6,5,4,3,2,1,0}; for (i=0; i<n; i++) R[i].key=a[i]; printf(" :"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("
"
); InsertSort(R,n); printf(" :"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("
"
); return 0; }

3. 반절 기 삽입 정렬
#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //       
typedef char InfoType[10];
typedef struct          //    
{
    KeyType key;        //    
    InfoType data;      //     ,   InfoType
} RecType;              //         

void InsertSort1(RecType R[],int n) // R[0..n-1]             
{
    int i,j,low,high,mid;
    RecType tmp;
    for (i=1; i<n; i++)
    {
        tmp=R[i];
        low=0;
        high=i-1;
        while (low<=high)
        {
            mid=(low+high)/2;
            if (tmp.key<R[mid].key)
                high=mid-1;
            else
                low=mid+1;
        }
        for (j=i-1; j>=high+1; j--)
            R[j+1]=R[j];
        R[high+1]=tmp;
    }
}
int main()
{
    int i,n=10;
    RecType R[MaxSize];
    KeyType a[]= {9,8,7,6,5,4,3,2,1,0};
    for (i=0; i<n; i++)
        R[i].key=a[i];
    printf("   :");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("
"
); InsertSort1(R,n); printf(" :"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("
"
); return 0; }

좋은 웹페이지 즐겨찾기