排序算法---选择排序(简单插入排序、堆排序)

wuyindengliu 2011-11-26

#include <stdio.h>
void simple_select(int a[], int n)
{
        int i,j,k,tmp;
        for(i=0;i<n-1;i++)
        {
                k=i;
                for(j=i+1;j<n;j++)
                {
                        if(a[j]<a[k])
                                k=j;
                }
                if(k!=i)
                {
                        tmp=a[k];
                        a[k]=a[i];
                        a[i]=tmp;
                }
        }
}
void shift(int a[], int low, int high)
{
        int i=low;
        int j=2*i;
        int tmp=a[i];
        while(j<=high)
        {
                if(j<high && a[j]<a[j+1])
                        j++;
                if(tmp<a[j])
                {
                        a[i]=a[j];
                        i=j;
                        j=2*i;
                }
                else
                        break;
        }
        a[i]=tmp;
}

/*the number of elements of a is n+1*/
/*a[0] is not used*/
void heap_sort(int a[], int n)
{
        int i,tmp;
        for(i=n/2;i>=1;i--)
                shift(a,i,n);
        for(i=n;i>=2;i--)
        {
                tmp=a[i];
                a[i]=a[1];
                a[1]=tmp;
                shift(a,1,n-1);
        }
}
 

相关推荐