博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法之---数据结构实训
阅读量:4566 次
发布时间:2019-06-08

本文共 4035 字,大约阅读时间需要 13 分钟。

#include <stdio.h>

# include "time.h"
# include "stdlib.h"
#define LEN 8
typedef struct
{
    int key[11];
    int length;
}L;
void printSort(L l)
{
    for(int  i=1;i<=10;i++)
    {
        printf("%d\t",l.key[i]);
    }
    
}
L createRand()
{
    L l;
    l.length=0;
    for(int i=1;i<11;i++)
    {
        l.key[i]=rand()%100;
        l.length=l.length+1;
    }
    return l;
}
void InsertSort(L l)
{
    printf("\t|-------------------|\n");
    printf("\t|   直接插入排序    |\n");
    printf("\t|-------------------|\n随机数:\n");
    printSort(l);printf("\n");
    for(int  i=2;i<=l.length;i++)
    {
        if(l.key[i]<=l.key[i-1])
        {
            l.key[0]=l.key[i];
            for(int j=i-1;l.key[0]<l.key[j];j--)
                l.key[j+1]=l.key[j];
                l.key[j+1]=l.key[0];
        
        }
        printf("i=%d  ",i);
        printSort(l);
    }
}
///
void ShellLinesert(L &l,int dk) //希尔排序
{
    for(int i=dk+1;i<=l.length;i++)
    {
        if(l.key[i]<l.key[i-dk])
        {
            l.key[0]=l.key[i];
            for(int j=i-dk;j>0&&(l.key[0]<l.key[j]);j-=dk)
                l.key[j+dk]=l.key[j];
            l.key[j+dk]=l.key[0];
        }
    }
}    
void  ShellSort(L l,int dk[],int t)
{
    printf("\t|-------------------|\n");
    printf("\t|     希尔排序      |\n");
    printf("\t|-------------------|\n随机数:\n");
    printSort(l);printf("\n");
    for(int k=0;k<t;k++)
    {
        ShellLinesert(l, dk[k]) ;
        printf("i=%d  ",k);
        printSort(l);
    }
}
//
void BubbleSort(L l)
{
    printf("\t|-------------------|\n");
    printf("\t|      冒泡排序     |\n");
    printf("\t|-------------------|\n随机数:\n");
    printSort(l);printf("\n");
    bool flag=true;
    int temp;
    for(int i=1;i<=l.length-1&&flag;i++)
    {
        flag=false;
        for(int j=1;j<=l.length-i;j++)
        {
            
            if(l.key[j]>l.key[j+1])
            {
                temp=l.key[j];
                l.key[j]=l.key[j+1];
                l.key[j+1]=temp;
                flag=true;
            }
        }
        printf("i=%d  ",i);
        printSort(l);
        
    }
}
//      
       
int Position(L &l,int i,int j)
{
    while(i<j)
    {
        while(i<j && l.key[j]>=l.key[0]) j--;
            l.key[i]=l.key[j];
        while(i<j && l.key[i]<=l.key[0]) i++;
            l.key[j]=l.key[i];
    }
    return i;
}
void QuictSort(L &l,int i,int j) //快速排序
{
    int p;
    if(i<j)
    {
        l.key[0]=l.key[i];
        p=Position( l,i,j);
        l.key[p]=l.key[0];
        QuictSort( l, i,p-1);
        QuictSort( l, p+1,j);
    }
    printSort(l);
    
}
void SelectSort(L l)//简单选择排序
{
    printf("\t|-------------------|\n");
    printf("\t|   简单选择排序    |\n");
    printf("\t|-------------------|\n随机数:\n");
    printSort(l);printf("\n");
    int k,temp,j,i;
    for( i=1;i<l.length;i++)
    {
        k=i;
        for( j=i+1;j<=l.length;j++)
        {
            if(l.key[k]>l.key[j])
                k=j;
        }
        if(k!=i)
        {
             temp=l.key[k];
             l.key[k]=l.key[i];
             l.key[i]=temp;
        }
    printf("i=%d  ",i);
    printSort(l);
    }    
}
///        
void Merge (L l1,L &l2,int low,int mid,int hight)
{
    int i=low;
    int j=mid+1;
    int k=low;
    while(i<mid&&j<hight)
    {
        if(l1.key[i]<=l1.key[j])
        {
            l2.key[k]=l1.key[i];
            i++;
        }
        else
        {
            l2.key[k]=l1.key[j];
            j++;
        }
        k++;
    }
    while(i<=mid)
    {
        l2.key[k]=l1.key[i];
        k++;
        i++;
    }
    while(j<=hight)
    {
        l2.key[k]=l1.key[j];
        k++;
        j++;
    
    }
    l2.length=k;
}
void msort(L l1,L &l2,int low,int hight)
{
    int mid;
    if(low==hight)
    {
        l2.key[low]=l1.key[low];
    }
    else
    {
        mid=(low+hight)/2;
        msort(l1,l2,low,mid);
        msort(l1,l2,mid+1,hight);
        Merge(l1,l2,low,mid,hight);
    }
}
void MergerSort(L &l)
{
    msort(l,l,1,l.length);
    
}
          
void SortCompare() //时间性能比较
{
    printf("\t|--------------------------|\n");
    printf("\t|    时间复杂度的比较      |\n");
    printf("\t|--------------------------|\n");
    printf("直接插入排序\tO(n^2)\n");
    printf("希尔排序\tO(n^2)\n");
    printf("冒泡排序\tO(n^2)\n");
    printf("简单选择排序\tO(n^2)\n");
    printf("快速排序\tO(n^2)\n");
    printf("归并排序\tO(n)\n");
}   
void menu_select()     //系统主界面
{
    printf("                    欢迎使用排序综合系统\n");
    printf("============================================================\n");
    printf("     *1.直接插入排序     *2.希尔排序\n");
    printf("     *3.冒泡排序         *4.快速排序\n");
    printf("     *5.简单选择排序     *6.归并排序\n");
    printf("     *7.时间性能比较     *0.退出排序系统\n");
    printf("============================================================\n");
    printf("请选择0-7:");
}
void main()
{
    L l=createRand();
    int item;
    while(item!=0)
    {
        menu_select() ;
        scanf("%d",&item);
        switch(item)
        {
        case 1:InsertSort( l);break;
        case 2: int a[2]; a[0]=5,a[1]=3;a[2]=1;ShellSort(l,a, 3);break;
        case 3:BubbleSort(l);break;
        case 4:
                printf("\t|-------------------|\n");
                printf("\t|    冒泡排序       |\n");
                printf("\t|-------------------|\n随机数\n");
                printSort(l);printf("\n");
                    QuictSort( l,0,10);break;
        case 5:SelectSort(l);break;
        case 6:        ;break;
        case 7:SortCompare();break;
        }
    }
}

转载于:https://www.cnblogs.com/lifeOfIT/archive/2011/12/25/2301110.html

你可能感兴趣的文章
OpenCV中的split函数
查看>>
MongoDB divide 使用之mongotempalte divide
查看>>
SSH不允许进行DNS解析
查看>>
Git(介绍和安装)
查看>>
磁盘管理
查看>>
重写与重载
查看>>
Python 爬取qqmusic音乐url并批量下载
查看>>
Java代码获取spring 容器的bean几种方式
查看>>
2015年3月5日(元宵节)——substr()与substring()的区别
查看>>
mysql 导出查询结果到文件
查看>>
Js参数值中含有单引号或双引号解决办法
查看>>
python5
查看>>
js转换/Date(........)/
查看>>
mysql中limit用法
查看>>
C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(1)
查看>>
c++ std::thread + lambda 实现计时器
查看>>
NSRunLoop个人理解
查看>>
BZOJ_1031_[JSOI2007]_字符串加密_(后缀数组)
查看>>
[osg]osg窗口显示和单屏幕显示
查看>>
前端技术在线文档地址链接
查看>>