插入排序是一种简单直观的排序算法,它的基本思想是将待排序的数据分为已排序和未排序两部分,每次从未排序部分取出一个元素插入到已排序部分的适当位置,直至全部元素都被插入到已排序部分为止。
插入排序的实现步骤如下:
- 将第一个元素视为已排序部分,将剩下的部分视为未排序部分。
- 从未排序部分依次取出一个元素,将它插入到已排序部分的适当位置。
- 重复步骤2,直至未排序部分为空。
以下是用C++实现插入排序的代码:
#include <iostream>
using namespace std;
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr[] = {5, 2, 6, 1, 3, 4};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Original array: ";
printArray(arr, n);
insertionSort(arr, n);
cout << "Sorted array: ";
printArray(arr, n);
return 0;
}
输出结果:
Original array: 5 2 6 1 3 4
Sorted array: 1 2 3 4 5 6
在插入排序的实现中,我们使用了一个循环来遍历未排序部分的元素,并将其插入到已排序部分的适当位置。内部的while循环用于将比当前元素大的元素后移一位,直至找到合适的插入位置。插入排序的时间复杂度为O(n^2),其中n是待排序序列的长度。