一些常见的排序的集合

#include <stdio.h>
#include <stdlib.h>
#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<n;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;i<L->length;i++){//依次遍历每一个元素
        printf("%d ",L->data[i]);
    }
    printf("\n");
}
//实现插入算法
void InsertSortSeq(SeqList *L){
    int i,j,temp;//计数器,计数器,临时变量
    for(i=1;i<L->length;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;i<L->length;i++){
            temp=L->data[i];//临时取出数据
            for(j=i-d;j>=0&&temp<L->data[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;i<L->length-1;i++){
        for(j=0;j<L->length-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<j){
        while(i!=j){//当i=j时退出循环
            while(i<j&&L->data[j]>=temp) j--;
            if(i<j) L->data[i++]=L->data[j];
            while(i<j&&L->data[i]<=temp) i++;
            if(i<j) L->data[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;i<L->length-1;i++){
            min=i;//先要有一个对比的
        for(j=i+1;j<L->length;j++){
            if(L->data[j]<L->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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值