关于C++的插入排序问题
有一插入排序代码:
template<class Type>
void insert(const Element<Type>e,Element<Type>*list,int i){
while(i>=0&&(e.getKey()<list[i].getKey())){
list[i+1]=list[i];
i--;
}
list[i+1]=e;
}
template<class Type>
void InsertionSort(Element<Type>*list,const int n){
?for(int j=1;j<n;j++)insert(list[j],list,j-1);
}
假设Element类已经定义。
insert函数是从数组末端开始扫描,为找到目标位置前,都将数据往后移一位,也就是对该数组有实质性的改变。
InsertionSort函数中调用insert函数的时候插入元素为list中的元素,而被插入序列也是list,插入的时候list即被改动,那在list中还未插入的数据不是要被覆盖了?
[解决办法]
不是覆盖,只是将得到的数据放到缓冲区相应的位置,插入完在缓冲区就完成了排序,并非覆盖。
你可以参考下网络上的资料,快速排序(插入排序)。