C++程序 插入排序
插入排序是一种简单的排序算法,它的核心思想是将待排序的数列分为已排序和未排序两部分,初始时已排序部分只有一个元素,然后从未排序部分依次取出元素插入到已排序部分中的合适位置。这个过程就像是打扑克牌时摸牌后整理手牌的过程。
下面通过C++程序实现插入排序算法,具体代码如下(注:代码中使用C++11标准的auto关键字自动推导变量类型):
#include <iostream>
#include <vector>
using namespace std;
void insertSort(vector<int>& nums){
int n = nums.size();
for(int i=1; i<n; ++i){
int temp = nums[i];
int j = i-1;
while(j>=0 && nums[j]>temp){
nums[j+1] = nums[j];
--j;
}
nums[j+1] = temp;
}
}
int main(){
vector<int> nums = {3,6,1,9,0,4,7,2};
insertSort(nums);
for(auto num:nums){
cout << num << " ";
}
cout << endl;
return 0;
}
在这个代码中,我们定义了一个insertSort函数,它接受一个整数向量nums作为参数。这个函数使用一个for循环遍历整个向量,从下标1开始,因为下标0的元素可以看作已排好序的元素。
在循环体内,我们将第i个元素标记为临时变量temp,然后使用一个while循环,不断将temp与已排序部分中的元素进行比较,并将较大的元素往后移动,直到找到temp的合适位置。移动元素的过程可以使用被动赋值的方式,即不断将较大的元素往后移动一个位置,并将空出来的位置留给temp。
最后,我们将temp插入到合适的位置之后,即nums[j+1]这个位置。
在main函数中,我们定义了一个向量nums,使用insertSort函数对它进行排序,并输出排序后的结果。
结论
插入排序是一种简单且有效的排序算法,时间复杂度为O(n^2),虽然它的性能不如快速排序和归并排序等高级算法,但在部分数据量较小的排序问题上,插入排序表现得更加优秀。在实际应用中,插入排序经常被用作快速排序等高级算法的优化,或者在内存资源受限的场合下使用。