前言:
先简单介绍三种简单排序算法。虽然这些算法简单易懂,而且易于实现,但对于待排序的记录数较多的排序算法,它们速度就非常慢了,可在某些特殊情况下,这些最简单的算法可能是最好的算法。/font>
插入排序:
最佳情况插入排序的时间代价是O(n),最差情况插入排序的时间代价是O(n^2)template <typename E, templete Comp>
void insort(E A[], int n){ //Insertion Sort
for(int i=1;i<n;i++) //Insert i'th record
for(int j=i;(j>0) && (Comp::prior(A[j],a[j-1]));j--)
swap(A,j,j-1);
}
冒泡排序:
最佳、平均、最差情况冒泡排序的时间代价都是O(n^2)
template <typename E, templete Comp>
void bubsort(E A[], int n){ //Bubble Sort
for(int i=0;i<n-1;i++) //Bubble up i'th record
for(int j=n-1;j>i;j--)
if(Comp::prior(A[j],A[j-1]))
swap(A,j,j-1);
}
选择排序:
template <typename E, templete Comp>
void selsort(E A[], int n){ //Selection Sort
for(int i=0;i<n-1;i++){ //Select i'th record
int lowindex = i; //Remember its index
for(int j=n-1;j>i;j--) //Find the least value
if(Comp::prior(A[j],A[lowindex]))
lowindex = j; //Put it in place
swap(A,j,lowindex);
}
}