我们常用到的排序算法有冒泡排序、shell排序、快速排序法,它们的性能和实现难易程度都不同,
它们的排序原理网上很多,随便一搜就是,下面主要简要介绍一下实现过程:
1、冒泡排序法:
学习c语言的同学接触到的第一种排序算法便是冒泡排序算法,它的实现过程如下示
void maoPaoSort(int *data,int n){
for(int i=0;i<n;i++)
for(int j=0;j<n-i-1;j++)
if(data[j+1]<data[j]){
data[j+1]+=data[j];
data[j]=data[j+1]-data[j];
data[j+1]-=data[j];
}
};
2、shell排序法:
shell排序算法相对于冒泡算法而言,其速度有所提升,但排序时会存在不稳定的因素,
具体的实现过程如下所示:
void shellSort(int *data,int d,int n){
int j;
for(int i=d;i<n;i++)
if(data[i]<data[i-d]){
j=i-d;
do{
data[j+d]+=data[j];
data[j]=data[j+d]-data[j];
data[j+d]=data[j+d]-data[j];
j-=d;
}while(j>0&&data[j+d]<data[j]);
}
};
void startShell(int *data,int n){
int parameter=n;
do{
parameter=parameter/3+1;
shellSort(data,parameter,n);
}while(parameter>1);
}
3、快速排序法:
这一算法和shell排序算法存在着相同的问题,即,排序时的不稳定因素,但,其排序的
速度比前两种算法快点;其具体实现过程如下示:
int quickSort(int *data,int left,int right){
if(left<right){
int pleft,pright,k=0;
pleft=left;
pright=right;
while(pleft<pright){
if(k==0&&data[pright]<data[pleft]){
data[pright]+=data[pleft];
data[pleft]=data[pright]-data[pleft];
data[pright]-=data[pleft];
k=1;
}else if(k==0){
pright--;
}
if(k==1&&data[pright]<data[pleft]){
data[pright]+=data[pleft];
data[pleft]=data[pright]-data[pleft];
data[pright]-=data[pleft];
k=0;
}else if(k==1){
pleft++;
}
}
quickSort(data,left,pright-1); //循环递归排序左边
quickSort(data,pleft+1,right); //循环递归排序右边
}
return 0;
};