1.插入排序
1.排序思想
插入排序的主要思想就是把每一个元素插入合适的位置,以升序来分析,首先分析前两个元素,如果data[0]大于data[1],交换他们的次序,这时,前两个元素已经是已经排好序的。考虑data[2]:
如果data[2]小于data[0]和data[1],将data[1]和data[1]都挪动一个位置。data[0]放在位置1,data[1]放在位置2上,而data[2]放在位置0上。
如果data[2]大于data[0]小于data[1],将data[2]与data[1]交换。
如果data[2]大于data[0]和data[1],不操作。
接着以同样的方式操作data[3],知道最后一个元素。
2.排序实现
C语言实现:
void insert_sort(int data[],int n) { int i=1; for(;i<n;i++) { int j = i; int temp = data[i]; for(;j > 0 && temp < data[j-1];j--) data[j] = data[j-1]; data[j] = temp; } } int main() { int data[10] = {34,1,43,2,112,32,112,67,432,13}; int len = sizeof(data)/sizeof(int); insert_sort(data,len); for(int i=0;i<len;i++) printf("%d,",data[i]); printf("\n"); return 0; }
C++实现:
template<class T,class Compare> void insert_sort(vector<T> &vec,Compare com) { for(int i=1,j;i<vec.size();i++) { T temp = vec[i]; for(j=i;j>0 && com(temp,vec[j-1]);j--) vec[j] = vec[j-1]; vec[j] = temp; } } int main() { int _data[10] = {34,1,43,2,112,32,112,67,432,13}; int len = sizeof(_data)/sizeof(int); std::vector<int> data; for(int i=0;i<len;i++) data.push_back(_data[i]); insert_sort(data,std::less<int>); for(int i=0;i<data.size();i++) cout << data.at(i) << ends; cout << endl; return 0; }
3.时空间复杂度分析
时间复杂度:O(n2)
空间复杂度:S(1)
插入排序为稳定排序