关闭

第2章:算法基础

127人阅读 评论(0) 收藏 举报
分类:

1:插入排序:

代码如下:

template<class Type>
void insertionSort(vector<Type>& a)
{
        for(typename vector<Type>::size_type i=1;i!=a.size();i++)
        {
                Type tmp=a[i];
                typename vector<Type>::size_type j;
                for(j=i;j>=1&&tmp<a[j-1];j--)
                        a[j]=a[j-1];
                a[j]=tmp;
        }
}

2:归并排序:

归并排序用到了分治算法,代码如下:

template<class Type>
void merge(vector<Type>& a,vector<Type>& tempArray, int leftPos,int rightPos,int rightEnd)
{
        int leftEnd=rightPos-1;
        int tempPos=leftPos;
        int numElements=rightEnd-leftPos+1;

        while( leftPos<=leftEnd && rightPos<=rightEnd)
                if(a[leftPos]<=a[rightPos])
                        tempArray[tempPos++]=a[leftPos++];
                else
                        tempArray[tempPos++]=a[rightPos++];

        while(leftPos<=leftEnd)
                tempArray[tempPos++]=a[leftPos++];

        while(rightPos<=rightEnd)
                tempArray[tempPos++]=a[rightPos++];

        for(int i=0;i!=numElements;i++,rightEnd--)
                a[rightEnd]=tempArray[rightEnd];
}

template<class Type>
void mergeSort(vector<Type>& a,vector<Type>& tempArray,int left,int right)
{
        if(left<right){
                int center=(left+right)/2;
                mergeSort(a,tempArray,left,center);
                mergeSort(a,tempArray,center+1,right);
                merge(a,tempArray,left,center+1,right);
        }
}

template<class Type>
void mergeSort( vector<Type>& a)
{
        vector<Type> tempArray(a.size());
        mergeSort(a,tempArray,0,a.size()-1);
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场