// sort.c by 乐观次品
// 以下常用的排序算法都在这里了,希望能帮到你。
#include <stdio.h>
#define N 15
#define swap(A,B) {int temp; temp = A; A = B; B = temp;}
#define min(A,B) ((A<B)?A:B)
/*int partition(int *a,int l,int r)
{
int v = a[l];
int left = l, right = r+1;
while(1)
{
while(a[++left]<v && left<r);
while(a[--right]>v);
if(left<right) swap(a[left],a[right])
else break;
}
swap(a[l],a[right]);
return right;
}
void quicksort(int *a,int l,int r)
{
int mid;
if(l >= r) return;
mid = partition(a,l,r);
quicksort(a,l,mid-1);
quicksort(a,mid+1,r);
}
void merge(int *a,int l,int m,int r)
{
int b[N];
int i =l, j=m+1, k =0;
while(i<=m && j<=r)
{
if(a[i]<a[j]) b[k++] = a[i++];
else b[k++] = a[j++];
}
while(i<=m) b[k++] = a[i++];
while(j<=r) b[k++] = a[j++];
for(k=0,i=l;i<=r;i++,k++) a[i] = b[k];
}
void mergesort(int *a,int l,int r)
{
int step=1;
int i;
for(step=1;step<r;step = 2*step)
for(i=l;i<=r;i=i+2*step)
merge(a,i,min(i+step-1,r),min(i+2*step-1,r));
}
void mergesort(int *a,int l,int r)
{
int mid = (l+r)/2;
if(l>=r) return;
mergesort(a,l,mid);
mergesort(a,mid+1,r);
merge(a,l,mid,r);
}
void shellsort(int *a, int len)
{
int step;
int i,j;
int temp;
for(step = len/2; step>=1; step /=2)
{
for(i=step;i<len;i++)
{
j = i;
temp = a[i];
while(j-step>=0 && a[j-step] > temp)
{
a[j] = a[j-step];
j -= step;
}
a[j] = temp;
}
}
}
void insertsort(int *a, int len)
{
int i,j;
int temp;
for(i=1;i<len;i++)
{
j=i;
temp = a[i];
while(j>0 && a[j-1]>temp)
{
a[j] = a[j-1];
j--;
}
a[j]=temp;
}
}
void selectsort(int *a, int l,int r)
{
int i,j,min;
for(i=l;i<r;i++)
{
min=i;
for(j=i+1;j<=r;j++)
{
if(a[j]<a[min]) min=j;
}
swap(a[i],a[min]);
}
} */
void heapadjust(int *a,int k,int n)
{
int j;
while(2*k <= n)
{
j = 2*k;
if(a[j]<a[j+1] && j<n-1) j++;
if(a[k]>=a[j]) break;
swap(a[k],a[j]);
k = j;
}
}
void heapsort(int *a,int l,int r)
{
int k,n=r-l+1;
for(k=n/2;k>=l;k--)
heapadjust(a,k,n);
while(r>l)
{
swap(a[l],a[r]);
r--;
heapadjust(a,l,r);
}
}
void main()
{
int a[N] = {65,70,80,65,50,90,44,65,65,33,22};
int i;
printf("\n before sort :\n");
for(i=0;i<N;i++) printf(" %d",a[i]);
//quicksort(a,0,N-1);
//mergesort(a,0,N-1);
//shellsort(a,N);
//insertsort(a,N);
//selectsort(a,0,N-1);
heapsort(a,0,N-1);
printf("\n after sort :\n");
for(i=0;i<N;i++) printf(" %d",a[i]);
}
温馨提示:答案为网友推荐,仅供参考