什么叫插入排序?
- 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序。
实现插入的基本思想是什么?
- 每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
实现步骤
- 找到插入位置
- 将插入位置上的元素向后移。
- 将元素放入插入位置。
代码实现
void Insertsort (int a[], int n) //由小到大的排序 { int i, j, k; for (i = 1; i < n; i++) // 外侧循环实现插入的个数 { // 为a[i]在'a[0]....a[i-1]'有序区间中找一个合适的位置 for (j = i - 1; j >= 0; j--) // 从最大的元素开始比较。 if (a[j] < a[i]) break; //插入位置为a[j] if (j != i - 1) //将比a[i]大的数据向后移 { int temp = a[i]; for (k = i - 1; k > j; k--) /*有序区最后一个元素移到a[i]位置 以此类推*/ a[k + 1] = a[k]; a[k + 1] = temp; //或者写为a[j] = temp 将a[i]放到正确位置上 } } }
时间复杂度为(n2)。