插入排序
void insertsort(int a[],int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
if(a[i]<a[i-1])
{
temp=a[i];
for(j=i-1;a[j]>temp&&j>=0;j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
}
选择排序
void selectsort(int a[],int n)
{
int i,j,min;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(a[min]>a[j])
{
min=j;
}
}
if(min!=i)
{
int temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
}
快速排序
int partition(int a[],int low,int high)
{
int pivot=a[low];
while(low<high)
{
while(low<high&&a[high]>=pivot)
{
--high;
}
a[low]=a[high];
while(low<high&&a[low]<=pivot)
{
++low;
}
a[high]=a[low];
}
a[low]=pivot;
return low;
}
void quicksort(int a[],int low,int high)
{
int p;
if(low<high)
{
p=partition(a,low,high);
quicksort(a,low,p-1);
quicksort(a,p+1,high);
}
}
归并排序
void merge(int a[],int low,int mid,int high)
{
int b[10];
int i,j,k;
for(k=low;k<=high;k++)
b[k]=a[k];
for(i=low,j=mid+1,k=i;i<=mid,j<=high;k++)
{
if(b[i]<b[j])
a[k]=b[i++];
else
a[k]=b[j++];
}
while(i<=mid)
a[k++]=b[i++];
while(j<=high)
a[k++]=b[j++];
}
void mergesort(int a[],int low,int high)
{
int mid;
if(low<high)
{
mid=(low+high)/2;
mergesort(a,low,mid);
mergesort(a,mid+1,high);
merge(a,low,mid,high);
}
}
堆排序
void headadjust(int a[],int k,int len)
{
int i;
a[0]=a[k];
for(i=2*k;i<=len;i*=2)
{
if(i<len&&a[i]<a[i+1])
i++;
if(a[0]>=a[i])
break;
else
{
a[k]=a[i];
k=i;
}
}
a[k]=a[0];
}
void buildmaxheap(int a[],int len)
{
int i;
for(i=len/2;i>0;i--)
{
headadjust(a,i,len);
}
}
void heapsort(int a[],int len)
{
int i;
buildmaxheap(a,len);
for(i=len;i>1;i--)
{
int temp=a[i];
a[i]=a[1];
a[1]=temp;
headadjust(a,1,i-1);
}
}