插入法排序
#include <stdio.h>
main()
{
int a[]={7,3,1,2,4,43,12,5,32,12,5,23,1,46,4},i,j,k,*x=a;
for(i=1;i<sizeof(a)/4;i++)//sizeof(a)/4 为数组元素个数
{
k=*(x+i);//利用指针指向该地址
j=i-1;
while(j>=0&&k<*(x+j))
*(x+j+1)=*(x+j--);
*(x+j+1)=k;
}
for(i=0;i<sizeof(a)/4;i++)
printf("%d ",a[i]);
}
折半插入法排序
#include <stdio.h>
main()
{
int a[]={9,3,1,6,4,2},i,j,k,x;
k=sizeof(a)/4/2;
while(k>=1)
{
for(i=k;i<sizeof(a)/4;i++)
{
x=a[i];
j=i-k;
while(j>=0&&x<a[j])
{
a[j+k]=a[j];
j-=k;
}
a[j+k]=x;
}
k=k/2;
}
for(i=0;i<sizeof(a)/4;i++)
printf("%d ",a[i]);
}
快速排序
#include <stdio.h>
void sort(int a[],int i,int j)
{
int m,n,k,t;
m=i;
n=j;
k=a[(i+j)/2];//定位中间元素 即6
do
{
while(a[m]<k&&m<j)
m++;
while(a[n]>k&&n>i)
n--;
if(m<=n)
{
t=a[m];
a[m]=a[n];
a[n]=t;
m++;
n--;
}}while(m<=n);
if(m<j)
sort(a,m,j);
if(n>i)
sort(a,i,n);
}
int main()
{
int a[]={9,3,1,6,4,2,8},i;
sort(a,0,sizeof(a)/4);//调用sort排序 参数(数组a,要开始排序的位置,结束排序的位置)
for(i=0;i<sizeof(a)/4;i++)
printf("%d ",a[i]);
return 0;
}