基础算法之排序查找算法

排序是计算机中重要的操作之一,接下来列举一下所有学到过的排序和查找,并将他们比较一下

    排序包括稳定的排序和不稳定的排序

插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的

选择排序、希尔排序、快速排序、堆排序是不稳定的

这里还有一些关于排序的东西稍后会补上

常用的算法比如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);
}
原文地址:https://www.cnblogs.com/OneDream/p/3000844.html