排序算法
一 冒泡排序
通过左边与右边比较进行交换而实现排序
#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;
}
但排序许多时候要排序结构体,保持一项排序,其他的元素跟随不变。
下次在写。