快速排序算法
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。(来自百度百科)
int j, P;
for(int i=1; i<n; i++)
{
P = a[i];
for(j=i; j>0 && a[j-1]>P; j--)
a[j] = a[j-1];
a[j] = P;
}
堆排序算法
#define LeftChild(i) (2*(i)+1)
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void PercDown(int *a, int i, int n)
{
int child;
int tmp;
for(tmp=a[i]; LeftChild(i)<n; i=child)
{
child=LeftChild(i);
if(child!=n-1 && a[child+1] > a[child])
child++;
if(tmp<a[child])
a[i]=a[child];
else
break;
}
a[i] = tmp;
}
void HeapSort(int *a, int n)
{
int i;
for(int i=n/2; i>=0; i--)
PercDown(a, i, n);
for(i=n-1; i>0; i--)
{
swap(&a[0], &a[i]);
PercDown(a, 0, i);
}
}