• 一些常见的排序的集合


    #include
    #include
    #define  MAX   50 /*线性表的最大长度*/
    typedef int ElemType; /*数据元素类型*/
    /*顺序表类型定义*/
    typedef  struct
    { ElemType  data[MAX];
         int  length;  /*当前表的长度*/
    } SeqList;
    //创建一个最大长度为50的数组,当然是最大,没有让你全部都用完
    SeqList *InitSeqlist(){
        SeqList *head=(SeqList*)malloc(sizeof(SeqList));//定义一个结构体的指针
        head->length=0;//初始化长度为0
        return head;//返回创建好的一个不知道有木有顺序的数组
    }
    //输入元素
    void input(SeqList *L){
        int n;
        printf("Please input n what you want ?\n");
        scanf("%d",&n);
        int i;
        for(i=0;i         printf("Please input %d number:",i+1);
            scanf("%d",&L->data[i]);
            L->length++;
            printf("\n");
        }
    }
    //打印输出结果
    void output(SeqList *L){
        int i;//计数器
        for(i=0;ilength;i++){//依次遍历每一个元素
            printf("%d ",L->data[i]);
        }
        printf("\n");
    }
    //实现插入算法
    void InsertSortSeq(SeqList *L){
        int i,j,temp;//计数器,计数器,临时变量
        for(i=1;ilength;i++){
            j=i-1;
            temp=L->data[i];//存储临时的变量
            for(;j>=0&&L->data[j]>temp;j--){
                L->data[j]=L->data[j-1];//向后面移动
            }
            L->data[++j]=temp;//将当前的空空填进去
        }
    }
    //实现希尔排序
    void ShellSort(SeqList *L){
        int i,j,temp,d;//计数器,计数器,临时变量,步长
        for(d=L->length/2;d>0;d=d/2){//首先给出步长
            for(i=d;ilength;i++){
                temp=L->data[i];//临时取出数据
                for(j=i-d;j>=0&&tempdata[j];j=j-d){
                    L->data[j+d]=L->data[j];//向后移动
                }
                L->data[d+j]=temp;//将临时的变量放回去
            }
        }
    }
    //实现冒泡排序
    void BubbleSort(SeqList *L){
        int i,j,temp;//定义计数器,缓存变量
        for(i=0;ilength-1;i++){
            for(j=0;jlength-i-1;j++){
                if(L->data[j]>L->data[j+1]){//完成两个元素之间的交换
                    temp=L->data[j];
                    L->data[j]=L->data[j+1];
                    L->data[j+1]=temp;
                }
            }
        }
    }
    //实现快速排序
    void QuickSort(SeqList *L,int low,int high){
        int i=low,j=high,temp=L->data[i];
        if(i         while(i!=j){//当i=j时退出循环
                while(idata[j]>=temp) j--;
                if(idata[i++]=L->data[j];
                while(idata[i]<=temp) i++;
                if(idata[j--]=L->data[i];
            }
            L->data[i]=temp;
            QuickSort(L,low,i-1);
            QuickSort(L,i+1,high);
        }
    }
    //实现选择排序
    void SelectSort(SeqList *L){
        int i,j,min,temp;//计数器和最小值下标
        for(i=0;ilength-1;i++){
                min=i;//先要有一个对比的
            for(j=i+1;jlength;j++){
                if(L->data[j]data[min]){
                        min=j;//记录下最小的
                }
            }
            if(i!=min){//交换最小的
                temp=L->data[min];
                L->data[min]=L->data[i];
                L->data[i]=temp;
            }
        }
    }
    int men(SeqList *head){
        printf("\t\t\t请输入你的选择!!!!!!!!!!!!\n");
        printf("\t\t\t|****************顺序表排序操作***********|\n");
        printf("\t\t\t|                 1. 冒泡排序法           |\n");
        printf("\t\t\t|                 2. 快速排序法           |\n");
        printf("\t\t\t|                 3. 选择排序法           |\n");
        printf("\t\t\t|                 4. 插入排序法           |\n");
        printf("\t\t\t|                 5. 希尔排序             |\n");
        printf("\t\t\t|                 0.退出                  |\n");
        printf("\t\t\t|*****************************************|\n");
        int a;
        scanf("%d",&a);
        switch(a){
            case 1:BubbleSort(head);break;
            case 2:QuickSort(head,0,head->length);break;
            case 3:SelectSort(head);break;
            case 4:InsertSortSeq(head);break;
            case 5:ShellSort(head);break;
            case 0:return -1;
            default :
                printf("请输入正确的编号");
                break;
        }
        printf("排序之后的样子: ");
        output(head);
    }
    int main(){
        SeqList *head=InitSeqlist();//初始化结构体变量
        input(head);
        while(men(head)!=-1);//进行循环
        return 0;
    }
  • 相关阅读:
    圣诞旺季来临,流量突破30亿!赛盈分销双重福利加码,助力卖家抢夺旺季流量,爆单不费力!
    Nginx安装Lua
    【数据挖掘】搜狐公司数据挖掘工程师笔试题
    Mali GPU“补丁缺口”让 Android 用户容易受到攻击
    【三相太阳能光伏系统控制】在线性和非线性负载条件下模拟额定功率为33kW的三相并网光伏系统,提高电能质量研究(Simulink)
    RHCE-ansible(一)--- 安装ansible、主机清单、sudo提权、特权升级
    [数据集][VOC]眼睛佩戴数据集VOC格式6000张
    Leetcode1805-字符串中不同整数的数目
    Layui 主窗口调用 iframe 弹出框模块,获取控件的相应值
    osgEarth示例分析——osgearth_tracks
  • 原文地址:https://blog.csdn.net/lyshark_lyshark/article/details/126792819