算法学习之排序:插入排序
类比打扑克插牌,左侧为排好序区域,右侧第二张牌开始为未排序区域,与右侧对比,若比其小,左侧右移;否则插入当前位置;
//插入排序
using namespace std;
void InsertSort(int a[], int n)
{
//左侧第一个元素为已排序区域
for (int i = 1; i < n; i++)
{
//待排序元素,从第二个元素开始
int temp = a[i];
//与排好序区域对比
int j = i - 1;
for (; j >= 0 && a[j] > temp; j--)
//若左侧已拍好序元素大于待排序元素,将排序元素右移,即右侧元素赋值为左侧元素
a[j + 1] = a[j];
//将待排序元素插入空位
a[j + 1] = temp;
}
return;
}
int main()
{
cout << "请输入排序数组元素个数:" << endl;
int size = 0;
cin >> size;
int* p = new int[size];
cout << "请输入排序数组元素:" << endl;
for (int i = 0; i < size; i++)
cin >> p[i];
InsertSort(p, size);
for (int i = 0; i < size; i++)
cout << p[i]<<" ";
cout << endl;
delete [] p;
p = NULL;
return 0;
}