几种排序算法的实现

时间:2021-05-21 04:26:20
几种排序算法的实现几种排序算法的实现/**/ //////////////////////////////////////////////////////////////////////////////////////////////
几种排序算法的实现几种排序算法的实现/**/ /*利用随机函数产生N个随机整数(2000以上),对这些数进行多种方法进行排序。
几种排序算法的实现
几种排序算法的实现要求:
几种排序算法的实现
几种排序算法的实现至少采用三种方法实现(提示,可采用插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。
几种排序算法的实现并把排序后的结果保存在不同的文件中。
几种排序算法的实现
几种排序算法的实现统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
*/

几种排序算法的实现几种排序算法的实现
/**/ ////////////////////////////////////////////////////////////////////////////////////////////////
几种排序算法的实现// 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;
几种排序算法的实现}

几种排序算法的实现几种排序算法的实现
/**/ /*
几种排序算法的实现//直接插入排序
几种排序算法的实现void InsertSort(SqList L)
几种排序算法的实现{
几种排序算法的实现    for(int i=2;i<=L.length;i++)
几种排序算法的实现    if(LT(L.r[i].key,L.r[i-1].key))
几种排序算法的实现    {
几种排序算法的实现        L.r[0]=L.r[i];       //复制为哨兵
几种排序算法的实现        L.r[i]=L.r[i-1];
几种排序算法的实现        for(int j=i-2;LT(L.r[0].key,L.r[j].key);j--)
几种排序算法的实现        L.r[j+1]=L.r[j];       //记录后移
几种排序算法的实现        L.r[j+1]=L.r[0];     //插入到正确位置
几种排序算法的实现    }
几种排序算法的实现    printf("after insertsort the recodelist is : ");
几种排序算法的实现    for(i=1;i<=L.length;i++)
几种排序算法的实现    printf("%d ",L.r[i].key);
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现
几种排序算法的实现//折半插入排序
几种排序算法的实现void BInsertSort(SqList L)
几种排序算法的实现{
几种排序算法的实现    for(int i=2;i<=L.length;i++)
几种排序算法的实现    {
几种排序算法的实现        L.r[0]=L.r[i];
几种排序算法的实现        L.r[i]=L.r[i-1];
几种排序算法的实现        int low=0,high=i-1;
几种排序算法的实现        while(low<high) //寻找插入位置
几种排序算法的实现        {
几种排序算法的实现            int m=(low+high)/2;
几种排序算法的实现            if(LT(L.r[0].key,L.r[m].key))
几种排序算法的实现            high=m-1;
几种排序算法的实现            else low=m+1;
几种排序算法的实现        }
几种排序算法的实现        for(int j=i-1;j>=high+1;j--)
几种排序算法的实现        L.r[j+1]=L.r[j];       //记录后移
几种排序算法的实现        L.r[high+1]=L.r[0];       //插入记录
几种排序算法的实现    }
几种排序算法的实现    printf("after Binary insertsort the recodelist is : ");
几种排序算法的实现    for(i=1;i<=L.length;i++)
几种排序算法的实现    printf("%d  ",L.r[i].key);
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现
几种排序算法的实现//希尔排序
几种排序算法的实现void ShellInsert(SqList L ,int dk )  //一趟希尔插入排序
几种排序算法的实现{
几种排序算法的实现    for(int i=dk+1;i<=L.length;i++)
几种排序算法的实现        if(LT(L.r[i].key,L.r[i-dk].key))
几种排序算法的实现        {
几种排序算法的实现            L.r[0]=L.r[i];
几种排序算法的实现            for(int j=i-dk;(j>0) && LT(L.r[0].key,L.r[j].key);j-=dk)
几种排序算法的实现            L.r[j+dk]=L.r[j];
几种排序算法的实现            L.r[j+dk]=L.r[0];
几种排序算法的实现        }
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现int dlta[]={8,4,2,1};  //增量序列dlta[k]=2^(t-k-1)  t为排序趟数4
几种排序算法的实现int t=4;
几种排序算法的实现void ShellSort(SqList L ,int dlta[],int t )
几种排序算法的实现{
几种排序算法的实现    for(int k=0;k<t;k++)
几种排序算法的实现    ShellInsert( L ,dlta[k] );
几种排序算法的实现    
几种排序算法的实现    printf("after ShellSort the recodelist is : ");
几种排序算法的实现    for(int i=1;i<=L.length;i++)
几种排序算法的实现    printf("%d ",L.r[i].key);
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现
几种排序算法的实现//冒泡排序
几种排序算法的实现void BubbleSort(SqList L)
几种排序算法的实现{
几种排序算法的实现    int flag=1;
几种排序算法的实现    for(int i=1;i<=L.length && flag!=0;i++)
几种排序算法的实现    {
几种排序算法的实现        flag=0;
几种排序算法的实现        for(int j=1;j<=(L.length-i);j++)
几种排序算法的实现            if(LT(L.r[j].key,L.r[j+1].key))
几种排序算法的实现            {
几种排序算法的实现                RcdType temp = L.r[j];
几种排序算法的实现                L.r[j] = L.r[j+1];
几种排序算法的实现                L.r[j+1] = temp;
几种排序算法的实现                flag=1;
几种排序算法的实现            }
几种排序算法的实现    }
几种排序算法的实现    printf("after BubbleSort the recodelist is : ");
几种排序算法的实现    for(i=1;i<=L.length;i++)
几种排序算法的实现    printf("%d ",L.r[i].key);
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现
几种排序算法的实现//快速排序
几种排序算法的实现int Partition(SqList L,int low ,int high)  //一次划分
几种排序算法的实现{
几种排序算法的实现    L.r[0] = L.r[low];
几种排序算法的实现    KeyType pivotkey = L.r[low].key;  //第一个记录作为枢轴记录
几种排序算法的实现    while(low<high)
几种排序算法的实现    {
几种排序算法的实现        while((low < high) && LT(pivotkey,L.r[high].key))
几种排序算法的实现          --high;
几种排序算法的实现          L.r[low] = L.r[high];
几种排序算法的实现        while(low<high && LT(L.r[low].key , pivotkey )) 
几种排序算法的实现            ++low;
几种排序算法的实现            L.r[high] = L.r[low];
几种排序算法的实现    }
几种排序算法的实现    L.r[low]=L.r[0];       //枢轴记录到位
几种排序算法的实现    return low;           //返回枢轴位置
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现void Qsort(SqList L,int low,int high)
几种排序算法的实现{
几种排序算法的实现    if(low<high)
几种排序算法的实现    {
几种排序算法的实现        int pivotkey = Partition(L,low,high);
几种排序算法的实现        Qsort(L,pivotkey+1 ,high);
几种排序算法的实现        Qsort(L,low,pivotkey-1);
几种排序算法的实现    }
几种排序算法的实现
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现void QuickSort(SqList L)
几种排序算法的实现{
几种排序算法的实现    Qsort( L, 1, L.length);
几种排序算法的实现    printf("after QuickSort the recodelist is : ");
几种排序算法的实现    for(int i=1;i<=L.length;i++)
几种排序算法的实现    printf("%d ",L.r[i].key);
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现
几种排序算法的实现//简单选择排序
几种排序算法的实现SelectMinKey(SqList,int); //声明
几种排序算法的实现
几种排序算法的实现void SelectSort(SqList L)
几种排序算法的实现{    
几种排序算法的实现    for(int i=1;i<L.length;i++)
几种排序算法的实现    {
几种排序算法的实现        int j = SelectMinKey(L,i); //在L.r[i....L.length]中选择一个最小的记录
几种排序算法的实现        if(i!=j)   //交换记录
几种排序算法的实现        {
几种排序算法的实现            RcdType temp = L.r[j];
几种排序算法的实现            L.r[j] = L.r[i];
几种排序算法的实现            L.r[i] = temp;
几种排序算法的实现        }
几种排序算法的实现    }
几种排序算法的实现    printf("after SelectSort the recodelist is : ");
几种排序算法的实现    for(i=1;i<=L.length;i++)
几种排序算法的实现    printf("%d ",L.r[i].key);
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现int SelectMinKey(SqList L,int i)  //寻找记录中最小值的位置
几种排序算法的实现{
几种排序算法的实现    KeyType k;
几种排序算法的实现    int position;
几种排序算法的实现    k = L.r[i].key;
几种排序算法的实现    for(;i<=L.length;i++)
几种排序算法的实现    {
几种排序算法的实现        if(LT(L.r[i].key,k))
几种排序算法的实现        {
几种排序算法的实现            k = L.r[i].key;
几种排序算法的实现            position=i;
几种排序算法的实现        }
几种排序算法的实现    }
几种排序算法的实现    return position;
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现//堆排序
几种排序算法的实现
几种排序算法的实现
几种排序算法的实现void HeapAdjust(HeapType H, int s ,int m)   //堆调整函数(筛选)
几种排序算法的实现//已知H.r[s...m]中记录的关键字除H.r[s].key 之外均满足堆的定义,本函数调整H.r[s]的关键字
几种排序算法的实现//使H.r[s....m]成为一个大顶堆(对其中的关键字而言)
几种排序算法的实现{
几种排序算法的实现    RcdType rc = H.r[s];  //现在的顶部结点
几种排序算法的实现    for(int j=2*s;j<=m;j*=2)        //沿key 较大的孩子结点像下筛选
几种排序算法的实现    {
几种排序算法的实现        if(j<m && LT(H.r[j].key,H.r[j+1].key)) ++j;  //j为较大记录的下标
几种排序算法的实现        if(!LT(rc.key,H.r[j].key))  break;  //rc应插入在位置s上
几种排序算法的实现        H.r[s]=H.r[j];
几种排序算法的实现        s=j;
几种排序算法的实现    }
几种排序算法的实现    H.r[s]=rc;   //插入
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现void HeapSort(HeapType H)   //堆排序
几种排序算法的实现{
几种排序算法的实现    for(int i=H.length/2; i>0;i--)  //把H.r[1...L.length]建成大顶堆
几种排序算法的实现    HeapAdjust( H, 1 ,H.length);
几种排序算法的实现    for(i=H.length;i>1;i--)
几种排序算法的实现    {
几种排序算法的实现        RcdType temp = H.r[1];      //将堆顶记录和子序列H.r[1...i]中的最后一个记录交换
几种排序算法的实现        H.r[1]=H.r[i];
几种排序算法的实现        H.r[i]=temp;
几种排序算法的实现        HeapAdjust(H, 1 ,i-1);  //重新调整为大顶堆
几种排序算法的实现    }
几种排序算法的实现    printf("after HeapSort the recodelist is : ");
几种排序算法的实现    for(i=1;i<=H.length;i++)
几种排序算法的实现    printf("%d ",H.r[i].key);
几种排序算法的实现}
几种排序算法的实现
几种排序算法的实现
*/

几种排序算法的实现
// 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; 
几种排序算法的实现几种排序算法的实现
/**//*        double duration[8]; 
几种排序算法的实现        int count=0;
几种排序算法的实现        
几种排序算法的实现             start = clock();  
几种排序算法的实现             InsertSort( L);
几种排序算法的实现             finish = clock();  
几种排序算法的实现             duration[count] = (double)(finish - start) / CLOCKS_PER_SEC; 
几种排序算法的实现             printf( "InsertSort cost time %f seconds: ", duration[count] ); 
几种排序算法的实现             count++;
几种排序算法的实现             system("pause"); 
几种排序算法的实现        
几种排序算法的实现             start = clock();    
几种排序算法的实现             BInsertSort( L);
几种排序算法的实现             finish = clock();  
几种排序算法的实现             duration[count] = (double)(finish - start) / CLOCKS_PER_SEC; 
几种排序算法的实现             printf( "BInsertSort cost time %f seconds: ", duration[count] ); 
几种排序算法的实现             count++;
几种排序算法的实现             system("pause"); 
几种排序算法的实现                 
几种排序算法的实现             start = clock();
几种排序算法的实现             ShellSort( L ,dlta,4 );
几种排序算法的实现             finish = clock();  
几种排序算法的实现             duration[count]= (double)(finish - start) / CLOCKS_PER_SEC; 
几种排序算法的实现             printf( "ShellInsert cost time %f seconds: ", duration[count] ); 
几种排序算法的实现             count++;
几种排序算法的实现             system("pause"); 
几种排序算法的实现         
几种排序算法的实现             start = clock();
几种排序算法的实现             BubbleSort( L);
几种排序算法的实现             finish = clock();  
几种排序算法的实现             duration[count] = (double)(finish - start) / CLOCKS_PER_SEC; 
几种排序算法的实现             printf( "BubbleSort cost time %f seconds: ", duration[count]  ); 
几种排序算法的实现             count++;
几种排序算法的实现             system("pause"); 
几种排序算法的实现                 
几种排序算法的实现             start = clock();
几种排序算法的实现             QuickSort( L);
几种排序算法的实现             finish = clock();  
几种排序算法的实现             duration[count] = (double)(finish - start) / CLOCKS_PER_SEC; 
几种排序算法的实现             printf( "QuickSort cost time %f seconds: ", duration[count]  ); 
几种排序算法的实现             count++;
几种排序算法的实现             system("pause"); 
几种排序算法的实现         
几种排序算法的实现             start = clock();
几种排序算法的实现             SelectSort(L);
几种排序算法的实现             finish = clock();  
几种排序算法的实现             duration[count] = (double)(finish - start) / CLOCKS_PER_SEC; 
几种排序算法的实现             printf( "SelectSort cost time %f seconds: ", duration[count] ); 
几种排序算法的实现             count++;
几种排序算法的实现             system("pause"); 
几种排序算法的实现                 
几种排序算法的实现             start = clock();
几种排序算法的实现             HeapSort( L);
几种排序算法的实现             finish = clock();  
几种排序算法的实现             duration[count] = (double)(finish - start) / CLOCKS_PER_SEC; 
几种排序算法的实现             printf( "HeapSort cost time %f seconds: ", duration[count] ); 
几种排序算法的实现             count++;
几种排序算法的实现             system("pause"); 
几种排序算法的实现
*/
             
几种排序算法的实现             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"); 
几种排序算法的实现         
几种排序算法的实现几种排序算法的实现
/**//*         printf("compare the cost time here : ");
几种排序算法的实现         for(count=0;count<8;count++)
几种排序算法的实现         {
几种排序算法的实现               printf( "T%d cost time %f seconds: ", count+1,duration[count] );
几种排序算法的实现         }
几种排序算法的实现
*/
         
几种排序算法的实现}