插入排序的步骤是从第二个数开始往前比较,如果前面的数字比第二个数大,则向后移一位。知道再也找不到比第二个数大的时候,将第二个数插入到该位置。第二轮则是从第三个数开始,以此类推。
enum Compare {LESS_THAN,BIGGER_THAN,EQUAL,}/*** 比较两个数的大小* @param a* @param b*/function defaultCompare<T>(a: T, b: T): Compare {if (a < b) {return Compare.LESS_THAN;} else if (a === b) {return Compare.EQUAL;} else {return Compare.BIGGER_THAN;}}function insertionSort<T>(array: T[], compareFn = defaultCompare): T[] {for (let i = 1; i < array.length; i++) {const tmp = array[i]let insertPos = ifor (let j = i - 1; j >= 0; j--) {if (compareFn(array[j], tmp) === Compare.BIGGER_THAN) {array[j+1] = array[j]insertPos = j} else {break;}}if (insertPos !== i) {array[insertPos] = tmp}}return array}
时间复杂度分析:
