排序是计算机中重要的操作之一,接下来列举一下所有学到过的排序和查找,并将他们比较一下
排序包括稳定的排序和不稳定的排序
插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的
选择排序、希尔排序、快速排序、堆排序是不稳定的
这里还有一些关于排序的东西稍后会补上
常用的算法比如qsort函数
3-1 对一维数组进行排序
int comp(const void *a,const void *b)
{
return *(int *)a-*(int *)b; //从小到大进行排序 return *(int *)b-*(int *)a; 为由大到小排序。
}
qsort(a,1000,sizeof(int),comp);
3-2对二维数组进行排序
是对一个二维数组的进行排序:
int a[1000][2]; 其中按照a[0]的大小进行一个整体的排序,其中a[1]必须和a[0]一起移动交换。
qsort(a,1000,sizeof(int)*2,comp);
int comp(const void *a,const void *b)
{
return ((int *)a)[0]-((int *)b)[0];
}
3-3对结构体进行排序
对结构体排序
char a[1000][20];
qsort(a,1000,sizeof(char)*20,comp);
int comp(const void *a,const void *b)
{
return strcmp((char *)a,(char *)b);
}
对一个结构体进行排序:
typedef struct str
{
char str1[11];
char str2[11];
}str,*stri;
str strin[100001]=;
int compare(const void *a,const void *b)
{
return strcmp(((str*)a)->str2,((str*)b)->str2);
}
qsort(strin,total,sizeof(str),compare);
3-4对double类型数据进行排序
#include <stdio.h>
#include <stdlib.h>
double s[1000];
int i,n;
int cmp(const void * a,const void * b)
{
return((*(double*)a-*(double*)b>0)?1:-1);
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf",&s[i]);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++)
printf("%lf ",s[i]);
return(0);
}