排序算法
一 冒泡排序
通过左边与右边比较进行交换而实现排序
#include <stdio.h>
int main()
{
int a[100],i,j,t,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
二 快速排序
#include <stdio.h>
#include <stdlib.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用;
void quicksort(int left ,int right)
{
int i,j,t,temp;
if(left>right)
{
return;
}
temp=a[left];
i=left;
j=right;
while(i!=j)
{
//顺序很重要,要先从右往左找,找到小于基准数的数
while(a[j]>=temp&&i<j)
j--;
//在从左往右找,找到大于基准数的数
while(a[i]<=temp&&i<j)
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//最终将基准数归位
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1);
quicksort(i+1,right);
return;
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
quicksort(1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
下面介绍函数库里的排序
一、C中的qsort
代码如下
int compInc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
qsort(a, len, sizeof(a[0]), compInc);
注意 :头文件#include <stdlib.h>
此时a[0]=最小。
当return *(int *)b - *(int *)a;
a[0]=最大。
二、C++中的sort
sort(a,a+n);
头文件为
#include<algorithm>
a为数组名。n为长度。
这样默认是从小到大。
如果想要从大到小
添加
int cmp(int a,int b)
{
return a>b;
}
但排序许多时候要排序结构体,保持一项排序,其他的元素跟随不变。
下次在写。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 7 个最近很火的开源项目「GitHub 热点速览」
· DeepSeekV3:写代码很强了
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提
· 让 AI 对接 MySQL 数据库实现快速问答对话