插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
算法步骤:
-
从第一个元素开始,该元素认为已经被排序;
-
取下一个元素,在已经排序的元素序列中从后向前扫描;
-
如果已排序元素大于新元素,将已排序元素移到下一位置;
-
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
-
将新元素插入到该位置后;
-
重复步骤2~5。
代码展示
#include <iostream>
using namespace std;
写法1
void insertSort_0(int arr[], int length)
{
int i, j, key;
for (i = 1; i < length; i++){
key = arr[i];
for (j = i - 1; j >= 0; j--){
if (arr[j] > key) {
arr[j + 1] = arr[j];
}
else
break;
}
arr[j + 1] = key;
}
}
写法2
void insertSort_1(int arr[], int length)
{
int j, key;
for (int i = 1; i < length; i++){
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key){
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
int main()
{
int iArr[] = {
7, 8, 9, 5, 2, 0, 12, 6 };
int len = sizeof iArr / sizeof(iArr[0]);
cout << "排序前:";
for (int i = 0; i < len; i++) {
cout << iArr[i] << " ";
}
cout << "\n排序后:";
insertSort_0(iArr, len);
for (int j = 0; j < len; j++) {
cout << iArr[j] << " ";
}
cout << endl;
system("pause");
return 0;
}