您的位置:首页 > 其它

Insertion_Sort(插入排序)

2012-11-01 21:42 302 查看
自己编一遍。。。防止遗忘,同时增加熟练度。罗列下来自百科的算法描述和基本步骤


算法描述

  一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  ⒈ 从第一个元素开始,该元素可以认为已经被排序

  ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描

  ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置

  ⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

  ⒌ 将新元素插入到下一位置中

  ⒍ 重复步骤2


伪代码

  INSERTION-SORT(A)

  1 forj←
2 tolength[A]

  2 dokey← A[j]

  3 Insert A[j]
into the sorted sequence A[1..j-1].

  4 i← j-1

  5 whilei>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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: