五种排序方法,通过菜单进行不同方法的选择

简介: 数据结构排序
#include<stdio.h>  #include<stdlib.h>#include <windows.h>  #define MAX 20  typedefstruct    {  
intelem[MAX];  
intlength;  
    }Seqlist;  
SeqlistInitlist()//顺序表的初始化      {  
SeqlistL;//定义一个顺序表  L.length=0;  
returnL;  
    }  
SeqlistCreate(SeqlistL)//顺序表的建立      {  
intx;  
//printf("输入元素,输入-1时结束输入");  scanf_s("%d", &x);  
while (x!=-1)  
        {  
L.elem[L.length] =x;  
L.length++;  
scanf_s("%d", &x);  
        }  
printf("创建成功\n");  
returnL;  
    } 
voidInsertSort(SeqlistL)//直接插入排序{
inti,j,temp;
for(i=1;i<L.length;i++)//从第二个元素开始if((L.elem[i]<(L.elem[i-1])))//如果当前元素小于前一个元素        {
temp=(L.elem[i]);
            (L.elem[i]=(L.elem[i-1]));
for(j=i-1;(L.elem[j])>temp&&j>=0;j--)//从后向前比较                (L.elem[j+1]=(L.elem[j]));
            (L.elem[j+1])=temp;
showout(L);
printf("\n");
        }
}
voidSelectSort(SeqlistL)//简单选择排序{
for(inti=1;i<=L.length;i++){//每次循环都选出最小的元素intmin=i;
for(intj=i+1;j<=L.length;j++){
if(L.elem[j]<L.elem[min]){
min=j;
            }
        }   
if(min!=i){//如果最小的元素不是第一个元素,则交换intt=L.elem[i];
L.elem[i]=L.elem[min];
L.elem[min]=t;
showout(L);
printf("\n");
        }
    }
}
voidmaopao(SeqlistL)//冒泡排序      {  
inti, j, t;  
for (i=0; i<L.length-1; i++)//比较次数  for (j=0; j<L.length-1-i; j++)  
        {  
if (L.elem[j]>L.elem[j+1])  
            {  
t=L.elem[j]; L.elem[j] =L.elem[j+1]; L.elem[j+1] =t;  
            }
showout(L);
printf("\n");
        }    
    }
voidQuickSort(SeqlistL, intlow, inthigh)//快速排序{
if (low<high){
inti=low;//i为左指针intj=high;//j为右指针intk=L.elem[low];
while (i<j){
while(i<j&&L.elem[j] >=k) j--;
if(i<j) L.elem[i++] =L.elem[j];
while(i<j&&L.elem[i] <k) i++;
if(i<j) L.elem[j--] =L.elem[i];
showout(L);
printf("\n");
        }
L.elem[i] =k;
QuickSort(L, low, i-1);
QuickSort(L, i+1, high);
showout(L);
printf("\n");
    }
}
voidmerge(SeqlistL,intl,intr,intmid,intn){//归并的"治"的过程,将两个有序序列合并为1个有序序列//l->最左边的元素下标,r->最右边的元素下标,mid->中间元素下标,temp[]是临时数组,n是a[]长度 inttemp[n];
inti=l;//左序列指针 intj=mid+1;//右序列指针 intk=0;//临时数组指针 while(i<=mid&&j<=r){
if(L.elem[i]<=L.elem[j])
temp[k++]=L.elem[i++];
else            {
temp[k++] =L.elem[j++];
            }
    }
while(i<=mid){//将左边剩余元素填充进temp中 temp[k++]=L.elem[i++];
    }
while(j<=r){//将右边剩余元素填充进temp中temp[k++]=L.elem[j++];
    }
k=0;
//将temp中的元素全部拷贝到原数组中while(l<=r)
    {L.elem[l++]=temp[k++];}
showout(L);
printf("\n");
}
voidmerge_sort(SeqlistL,intl,intr){//归并排序,“分而治之”的过程,递归实现if(l>=r)//保证l是左边,r是右边 n是L.elem[]长度 return ;
intmid=(l+r)/2;
//将序列分为两个序列,分别排序 merge_sort(L,l,mid);//左边归并排序,使左子序列有序merge_sort(L,mid+1,r);//右边归并排序,使右子序列有序merge(L,l,r,mid,r-l+1);//将两个有序子序列合并}
voidshowout(SeqlistL)  
    {  
inti=0;  
for (i=0; i<L.length; i++)  
        {  
printf("%2d", L.elem[i]);  
        }  
    }
intmenu(){
system("cls");
printf("*********************\n");
printf("**请选择排序的方法****\n");
printf("**1.直接插入排序******\n");
printf("**2.冒泡排序*********\n");
printf("**3.简单选择排序*****\n");
printf("**4.快速排序*********\n");
printf("**5.归并排序*********\n");
printf("**0.退出*************\n");
printf("**请选择数字序号1-6**\n");
printf("********************\n");
    }
intmain()  
    {
intn=0;
inta=0;
SeqlistLa;  
La=Initlist();  
printf("创建线性表,当输入-1时终止\n");  
La=Create(La);
a=menu();
scanf("%d",&n);
while(n){
switch(n)
        {
case1:
printf("经直接插入排序后线性表的元素为:\n");
InsertSort(La);
break;
case2:
printf("经冒泡排序后线性表的元素为:\n");
maopao(La);
break;
case3:
printf("经简单选择排序后线性表的元素为:\n");
SelectSort(La);
break;
case4:
printf("经快速排序后线性表的元素为:\n");
QuickSort(La,0,La.length-1);
break;
case5:
printf("经归并排序后线性表的元素为:\n");
merge_sort(La,0,La.length-1);
break;
default:
printf("输入错误,请重新输入\n");
break;
        }
getch();
menu(); 
scanf("%d", &n);
        }
return0;  
    }  
相关文章
|
7月前
|
Java
java实现遍历树形菜单方法——OpenSessionView实现
java实现遍历树形菜单方法——OpenSessionView实现
|
7月前
|
Java
java实现遍历树形菜单方法——TreeAction实现
java实现遍历树形菜单方法——TreeAction实现
|
7月前
|
Java
java实现遍历树形菜单方法——HibernateUtil实现
java实现遍历树形菜单方法——HibernateUtil实现
uniapp拖动排序实现思路
uniapp拖动排序实现思路
155 0
|
7月前
|
搜索推荐 算法 Python
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
55 2
|
4月前
|
JavaScript 前端开发 开发者
"震撼揭秘!ElementUI Table组件大变身,一键自定义升序降序按钮,排序操作秒变炫酷舞台,点击即燃,你的列表排序从此不再平凡!"
【8月更文挑战第16天】在Vue.js开发中,ElementUI的Table组件因其实用性和灵活性深受喜爱。本文通过一个后台管理系统用户列表的案例,展示了如何自定义添加“升序”和“降序”按钮以增强排序功能。首先确保安装Vue与ElementUI;接着定义表格数据及初始排序状态;利用scoped slot自定义列模板,加入按钮并绑定点击事件;最后实现在点击按钮时更新排序状态并重新排序数据的逻辑。这种方法不仅改善了用户体验,还为开发者提供了灵活调整排序逻辑的空间。
147 3
|
7月前
使用递归的方式删除菜单
使用递归的方式删除菜单
40 1
|
小程序 容器
小程序实现双列布局
小程序实现双列布局
|
存储 JSON 缓存
Java小技能:多级菜单排序并返回树结构菜单列表
需求: 菜单管理(服务商角色配置权限管理)、文章分类、MCC类目、区域信息。
413 0
Java小技能:多级菜单排序并返回树结构菜单列表