本篇复习的是插入排序。见度娘的原理:
直接插入排序的算法思路:
(1) 设置监视哨r[0],将待插入记录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个记录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
#include <iostream>
using namespace std;
//插入排序算法
int InsertSort(int* data, int sizeOfData)
{
int x,t = 0;
for (int i = 1; i < sizeOfData; i++) {
t = *(data + i);
//若前面的数字比后面的数据大时,则对数据进行后移,留出空位置给哨兵所在的位置数值插入
for (x = i-1; x >=0&&*(data+x)>t; x--) {
*(data + x + 1) = *(data + x);
}
*(data + x + 1) = t;//因为for循环最后一次执行了一次x--操作,所以需要进行+1才是真正需要插入的位置
for (int j = 0; j < sizeOfData; j++) {
cout << *(data + j) << " ";
}
cout << endl;
}
return 0;
}
int main()
{
int data[] = { 8,7,9,3,5,4,1,-2,18,10,-3 };
int sizeOfData = 11;
InsertSort(data, sizeOfData);
for (int i = 0; i < sizeOfData; i++) {
cout << data[i] <<" ";
}
cout << endl;
}
打印出来的结果:
7 8 9 3 5 4 1 -2 18 10 -3
7 8 9 3 5 4 1 -2 18 10 -3
3 7 8 9 5 4 1 -2 18 10 -3
3 5 7 8 9 4 1 -2 18 10 -3
3 4 5 7 8 9 1 -2 18 10 -3
1 3 4 5 7 8 9 -2 18 10 -3
-2 1 3 4 5 7 8 9 18 10 -3
-2 1 3 4 5 7 8 9 18 10 -3
-2 1 3 4 5 7 8 9 10 18 -3
-3 -2 1 3 4 5 7 8 9 10 18
-3 -2 1 3 4 5 7 8 9 10 18
大功造成,已经实现了功能。