排序算法-插入排序法(InsertSort)
1、说明
插入排序法是将数组中的元素逐一与已排序好的数据进行比较,先将前两个元素排序好,再将第三个元素插入适当的位置,也就是说这三个元素仍然是已排序好的,接着将第四个元素加入,重复此步骤,直到排序完成为止。可以看作是在一串有序的记录R1,R2,...,Ri中插入新纪录R,使得i+1个记录排序妥当。
2、算法分析
- 最坏情况和平均情况均需比较:次,时间复杂度为。最好情况时间复杂度为。
- 插入排序是稳定排序法。
- 因为只需一个额外的空间,所以空间复杂度为最佳。
- 这种排序法适用于大部分数据已经过排序的情况,也适用于往已排序数据库中添加新数据后再进行排序的情况。
- 由于插入排序法会造成数据的大量搬移,因此建议在链表上使用。
3、C++代码
#include<iostream>
using namespace std;
int main() {
int data[6] = { 9,7,5,3,4,6 };
cout << "原始数据:" << endl;
for (int i = 0; i < 6; i++) {
cout << data[i] << " ";
}
cout << endl;
int i;
int j;
//第1次:
//7 9 5 3 4 6
//第2次:
//5 7 9 3 4 6
//第3次:
//3 5 7 9 4 6
//第4次:
//3 4 5 7 9 6
//第5次:
//3 4 5 6 7 9
for (i = 1; i < 6; i++) {
int temp = data[i];
j = i - 1;
//temp > data[j] 从大到小排序的条件
//temp < data[j] 从小到大排序的条件
while (j >= 0 && temp < data[j]) {
data[j + 1] = data[j];
j--;
}
data[j + 1] = temp;
}
cout << "最终数据:" << endl;
for (int i = 0; i < 6; i++) {
cout << data[i] << " ";
}
cout << endl;
return 0;
}
输出结果