데이터 구조 루틴 - 교환 정렬 의 거품 정렬

본 고 는 [데이터 구조 기초 시리즈 (9): 정렬] 에서 4 교시 [교환 정렬 의 거품 정렬] 의 예 이다.
거품 정렬
#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //       
typedef char InfoType[10];
typedef struct          //    
{
    KeyType key;        //    
    InfoType data;      //     ,   InfoType
} RecType;              //         

void BubbleSort(RecType R[],int n)
{
    int i,j,k;
    RecType tmp;
    for (i=0; i<n-1; i++)
    {
        for (j=n-1; j>i; j--)   //  ,            
            if (R[j].key<R[j-1].key)
            {
                tmp=R[j];  //R[j] R[j-1]    ,          
                R[j]=R[j-1];
                R[j-1]=tmp;
            }
        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("
"
); BubbleSort(R,n); printf(" :"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("
"
); return 0; }

개 선 된 알고리즘 (거품 이 교환 되 지 않 아 정렬 과정 을 즉시 끝 냅 니 다)
#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //       
typedef char InfoType[10];
typedef struct          //    
{
    KeyType key;        //    
    InfoType data;      //     ,   InfoType
} RecType;              //         
void BubbleSort1(RecType R[],int n)
{
    int i,j,k,exchange;
    RecType tmp;
    for (i=0; i<n-1; i++)
    {
        exchange=0;
        for (j=n-1; j>i; j--)   //  ,          
            if (R[j].key<R[j-1].key)
            {
                tmp=R[j];  //R[j] R[j-1]    ,          
                R[j]=R[j-1];
                R[j-1]=tmp;
                exchange=1;
            }

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

좋은 웹페이지 즐겨찾기