您的位置:首页 > 其它

插入排序和堆排序算法

2016-09-25 14:09 183 查看
快速排序算法

  插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。(来自百度百科)

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法