排序算法之插入排序
**原理:**通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
举个例子:数组a[]={5,3,6,8,1,7,9,4,2}
先取出第一个数,即5,构建有序序列(单数肯定有序),如图:
紧接在后边无序的序列中取出第一个数,即3,在已排序序列{5}中从后向前,由于已排好序列{5}只有一个数,所以只要和5做比较插入即可,如图:
得到一个有序序列{3,5},再从无序序列{6,8,1,7,9,4,2}中取第一个数,即6,在有序序列{3,5}从后向前比较,找到相应位置插入,如图:
后边的数也是同样的步骤,不在详细叙述,只展示图:
C++代码:
#include<iostream>
using namespace std;
//交换数组
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int main(){
int a[9]={5,3,6,8,1,7,9,4,2};
for(int i=1;i<9;i++){
for(int j=i;j>0;j--){
if(a[j-1]>a[j]){
swap(a[j-1],a[j]);
}
}
}
//遍历数组:
for(int i=0;i<9;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
其时间复杂度为:O(n²),空间复杂度为O(1),稳定
以上就是插入排序的相关内容了。