刚开始看到insertsort,思路就是使用新来的元素与前述已经排好序的元素比较。然后进行插入或者跳到下一次比较。
实现的代码如下:
void InsertSort(int *pArray, int iSortNum) { int *pTemp = pArray; int iLoop = 0; int jLoop = 1; for(; jLoop != iSortNum ; ++jLoop) { int x = pTemp[jLoop]; iLoop = jLoop - 1; while(pArray[iLoop] >x && iLoop>=0) { pArray[iLoop+1] = pArray[iLoop]; --iLoop; } pArray[iLoop+1] = x; } }
这种排序跟冒泡法时间复杂度都是o(n^2),属于就地排序,空间复杂度o(1)。