C语言之排序

头文件

typedef struct list

{

       intarray[100];                                        //顺序表的排序

       intsize;            

}SqList;                            

 

主文件

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include "list.h"

 

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include "list.h"

 

SqList * create()                                        //创建待排序序列的存储结构,为直接插入排序准备

{

       inti,n;

       SqList*L;

       L=(SqList*)malloc(sizeof(SqList));

       printf("输入N个元素\n");

       scanf("%d",&n);

       for(i=1;i<=n;i++)                               //0的位置空着以便直插法设置监察哨

       {

              scanf("%d",&L->array[i]);

       }

       L->size=n;

       returnL;

}

 直接插入排序

void insertSort(SqList *l)                                   

{

       inti,j;

       for(i=2;i<=l->size;i++)

       {

              if(l->array[i]<l->array[i-1])                                      //比有序序列最大的一个小才移动

              {

                     l->array[0]=l->array[i];                                    //[0]为检查哨

                     for(j=i-1;l->array[j]>l->array[0];j--)                   //如果插入的值a小于正在比较的的值b,那么b往后移动一次,指示器j--以便与b的前一个比较

                     {

                            l->array[j+1]=l->array[j];                                 

                     }

                     l->array[j+1]=l->array[0];                                        //ab 所以把a插入

              }                         

       }

 

}

冒泡排序

void bubbleSort(SqList *l)

{

       inti,j,temp;

       for(i=0;i<l->size;i++)

       {

              for(j=1;j<=l->size-1;j++)

              {

                     if(l->array[j]>l->array[j+1])

                     {

                            temp=l->array[j];

                            l->array[j]=l->array[j+1];

                            l->array[j+1]=temp;

                     }

              }

       }

}

 

 快速排序的一趟划分

int partition(SqList *p, int low,int high)

{

       intkey;

       key=p->array[low];

       while(low<high)

       {

              while(low<high&&p->array[high]>=key)

              {

                     high--;

              }

       p->array[low]=p->array[high]; 

              while(low<high&&p->array[low]<=key)

              {

                     low++;

              }

       p->array[low]=p->array[high]; 

       }

       p->array[low]=key;

       returnlow;

}

 快速排序

void quickSort(SqList *l, int low,int high)

{

       intpivot;

       if(low<high)

       {

              pivot=partition(l,low,high);

              quickSort(l,low,pivot-1);

              quickSort(l,pivot+1,high);

       }

}

 选择排序

void selectSort(SqList *l)

{

       inti,j,small;

       inttemp;

       for(i=1;i<l->size;i++)                         //n-1

       {

              small=i;

              for(j=i+1;j<=l->size;j++)

              {

                     if(l->array[j]<l->array[small])

                     {

                            small=j;

                     }

              }

                     if(small!=i)

                     {

                            temp=l->array[small];

                            l->array[small]=l->array[i];

                            l->array[i]=temp;

                     }

       }

}

  显示排序结果

void display(SqList *l)                                                                        

{

       inti;e

       for(i=1;i<=l->size;i++)

       {

              printf("%d",l->array[i]);

       }

}

 

void main()

{

       SqList*L;

       L=create();

       bubbleSort(L);

       printf("冒泡排序\n");

       display(L);

       insertSort(L);

       printf("直接插入排序\n");

       display(L);

       quickSort(L,1,L->size);

       printf("快速排序\n");

       display(L);

       selectSort(L);

       printf("选择排序\n");

       display(L);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值