自己编一遍。。。防止遗忘,同时增加熟练度。罗列下来自百科的算法描述和基本步骤
算法描述
一般来说,插入排序都采用in-place在 数组 上实现。具体算法描述如下: ⒈ 从第一个元素开始,该元素可以认为已经被排序 ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描 ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置 ⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 ⒌ 将新元素插入到下一位置中 ⒍ 重复步骤2
伪代码
INSERTION-SORT( A ) 1 for j ← 2 to length[ A ] 2 do key ← A [ j ] 3 Insert A [ j ] into the sorted sequence A [1.. j -1]. 4 i ← j -1 5 while i >0 and A [ i ] > key 6 do A [ i +1] ← A [ i ] 7 i ← i -1 8 A [ i +1] ← key/******************************************
**
** Author: Wan KaiMing
** Date: 2012-11-01-21.18 星期四
**
*******************************************/
//插入排序(从小到大的排序)
//最好情况:O(n) 最坏情况:O(n^2) 稳定的排序
//原理:取定一个key,首先保证<该元素之前的为有序>,然后从后往前遍历,key<a[j]则往前继续找
/// 同时a[j]后移,直到找到自己的位置
#include<iostream>
#include<string>
using namespace std;
int main(){
int a[]={9,8,7,6,5,4,3,2,1};
int i;
int key;
cout<<"未经排序的数组为:";
for(i=0;i<9;i++) cout<<a[i]<<' ';
cout<<endl;
for(i=1;i<9;i++){
key=a[i]; //这是一个常量
int j=i-1; //j在i前一个位置开始
while(j>=0&&key<a[j]){ //如果k比前面的小并且j>0那么前面的元素一次后移,包括j=0的情况
a[j+1]=a[j];
--j;
}
a[j+1]=key;
}
cout<<endl;
cout<<"经插入排序的数组为:";
for(i=0;i<9;i++) cout<<a[i]<<' ';
cout<<endl;
return 0;
}