Insertion_Sort(插入排序)

来源:互联网 发布:苹果破解软件论坛 编辑:程序博客网 时间:2024/06/08 09:27

      自己编一遍。。。防止遗忘,同时增加熟练度。罗列下来自百科的算法描述和基本步骤

算法描述

  一般来说,插入排序都采用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 [i] >key
  6 do [i+1] ← [i]
  7 ← 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;}



原创粉丝点击