天天看點

幾種排序算法的實作

幾種排序算法的實作
幾種排序算法的實作

//

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

// distracb:

幾種排序算法的實作

//    幾種排序方法的實作

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

#include < stdio.h >

幾種排序算法的實作

#include < time.h >

幾種排序算法的實作

#include < stdlib.h >

幾種排序算法的實作
幾種排序算法的實作

#define  MAXSIZE  100

幾種排序算法的實作

//  const int MAXSIZE = 20 ;

幾種排序算法的實作
幾種排序算法的實作

// 定義資料結構

幾種排序算法的實作
幾種排序算法的實作

typedef  int  KeyType;

幾種排序算法的實作

typedef   char  InfoType;

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

typedef   struct ... {

幾種排序算法的實作

    KeyType key;

幾種排序算法的實作

    InfoType otherinfo;

幾種排序算法的實作

} RcdType;   // 記錄類型

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

typedef  struct ... {

幾種排序算法的實作

    RcdType r[MAXSIZE+1];

幾種排序算法的實作

    int length;

幾種排序算法的實作

} SqList;

幾種排序算法的實作
幾種排序算法的實作

typedef SqList HeapType;   // 堆采用順序表存儲結構表示

幾種排序算法的實作
幾種排序算法的實作

// 函數聲明部分

幾種排序算法的實作

// (注意聲明部分要加傳回類型)

幾種排序算法的實作

bool  LT(KeyType a ,KeyType b);    // 比較兩個關鍵字大小的函數

幾種排序算法的實作

void  InsertSort(SqList L);    // 直接插入排序

幾種排序算法的實作

void  BInsertSort(SqList L);   // 折半插入排序

幾種排序算法的實作

void  BubbleSort(SqList L);   // 冒泡排序

幾種排序算法的實作

void  QuickSort(SqList L);    // 快速排序

幾種排序算法的實作

void  ShellSort(SqList L);    // 希爾排序

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

//

幾種排序算法的實作

bool  LT(KeyType  a ,KeyType  b)

幾種排序算法的實作
幾種排序算法的實作

... {

幾種排序算法的實作

    if(a <= b) return true;

幾種排序算法的實作

    else return false;

幾種排序算法的實作

}

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

// 2-路歸并排序

幾種排序算法的實作
幾種排序算法的實作

void  Merge(RcdType SR[],RcdType TR[], int  i, int  m, int  n)   /????RcdType &TR[]為什麼就提示好多錯誤??

幾種排序算法的實作

// 将有序的SR[i..m]和SR[m+1..n]歸并為有序的TR[i..n]

幾種排序算法的實作
幾種排序算法的實作

... {

幾種排序算法的實作

    for(int k=i,j=m+1;(i<=m) && (j<=n);++k)  //将SR中的記錄由小到大的并入到TR

幾種排序算法的實作
幾種排序算法的實作

    ...{

幾種排序算法的實作

        if(LT(SR[i].key,SR[j].key))

幾種排序算法的實作

        TR[k]= SR[i++];

幾種排序算法的實作

        else TR[k]=SR[j++];

幾種排序算法的實作

    }

幾種排序算法的實作

    if(i<=m)

幾種排序算法的實作
幾種排序算法的實作

    ...{ 

幾種排序算法的實作

        for(;i<=m;i++,k++)

幾種排序算法的實作

        TR[k]=SR[i];

幾種排序算法的實作

    }

幾種排序算法的實作

    if(j<=n)

幾種排序算法的實作
幾種排序算法的實作

    ...{

幾種排序算法的實作

        for(;j<=n;j++,k++)

幾種排序算法的實作

        TR[k]=SR[j];

幾種排序算法的實作

    }

幾種排序算法的實作

}

幾種排序算法的實作
幾種排序算法的實作

void  MSort(RcdType SR[],RcdType TR1[], int  s, int  t)

幾種排序算法的實作

// 将SR[s..t]歸并排序為TR1[s..t]

幾種排序算法的實作
幾種排序算法的實作

... {

幾種排序算法的實作
幾種排序算法的實作

    RcdType TR2[20]; ///????????????????????這裡應該定義數組多大呢 、?

幾種排序算法的實作

    if(s == t) TR1[s]=SR[s];

幾種排序算法的實作
幾種排序算法的實作

    else...{

幾種排序算法的實作

        int m=(s+t)/2;  //将SR平分成兩部分

幾種排序算法的實作

        MSort(SR,TR2,s,m);  //遞歸地将SR[s..m]歸并為有序的TR2[s.m]

幾種排序算法的實作

        MSort(SR,TR2,m+1,t); //遞歸地将SR[m+1..t]歸并為有序的TR2[m+1..t]

幾種排序算法的實作

        Merge(TR2,TR1,s,m,t); //将TR2[s.m]  TR2[m+1..t]歸并到 TR1[s..m]

幾種排序算法的實作

    }

幾種排序算法的實作

}

幾種排序算法的實作
幾種排序算法的實作

void  MerqeSort(SqList L)

幾種排序算法的實作
幾種排序算法的實作

... {

幾種排序算法的實作

    MSort(L.r,L.r,1,L.length);

幾種排序算法的實作

    printf("after MerqeSort the recodelist is : ");

幾種排序算法的實作

    for(int i=1;i<=L.length;i++)

幾種排序算法的實作

    printf("%d ",L.r[i].key);

幾種排序算法的實作

}

幾種排序算法的實作
幾種排序算法的實作

void  menu()

幾種排序算法的實作
幾種排序算法的實作

... {

幾種排序算法的實作

    printf(" *************************** ");

幾種排序算法的實作

    printf(" 1: Insert Sort ");

幾種排序算法的實作

    printf(" 2: BInsert Sort ");

幾種排序算法的實作

    printf(" 3: Bubble Sort ");

幾種排序算法的實作

    printf(" 4: Quick Sort ");

幾種排序算法的實作

    printf(" 5: Straight Selection Sort ");

幾種排序算法的實作

    printf(" 6: Heap Sort ");

幾種排序算法的實作

    printf(" 7: Merge Sort ");

幾種排序算法的實作

    printf(" 8: Exit ");

幾種排序算法的實作

    printf(" *************************** ");

幾種排序算法的實作

}

幾種排序算法的實作
幾種排序算法的實作

// 主函數

幾種排序算法的實作

void  main()

幾種排序算法的實作
幾種排序算法的實作

... {

幾種排序算法的實作

    SqList L;

幾種排序算法的實作

    srand(10);

幾種排序算法的實作

    for(int i=1;i<=MAXSIZE;i++)

幾種排序算法的實作

    L.r[i].key=rand()+2000;

幾種排序算法的實作

    L.length=MAXSIZE;

幾種排序算法的實作
幾種排序算法的實作

        menu();

幾種排序算法的實作

        clock_t start, finish; 

幾種排序算法的實作

double duration; 

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

             start = clock();

幾種排序算法的實作

             MerqeSort( L);

幾種排序算法的實作

             finish = clock();  

幾種排序算法的實作

        //     duration[count] = (double)(finish - start) / CLOCKS_PER_SEC; 

幾種排序算法的實作

        //     printf( "MerqeSort cost time %f seconds: ", duration[count] ); 

幾種排序算法的實作

             //count++;

幾種排序算法的實作

             duration = (double)(finish - start) / CLOCKS_PER_SEC; 

幾種排序算法的實作

             printf( "MerqeSort cost time %f seconds: ", duration ); 

幾種排序算法的實作

             system("pause"); 

幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作
幾種排序算法的實作

}  

繼續閱讀