插入排序法
算法思想1:
从第二个元素开始选取,记作temp(位置为i),拿temp和其前面的元素比较,如果temp比其前面的第一个数还大,则temp位置不变,否则一直向前比较直到找到第一个小于temp的元素,记录其位置r并不在向前比较(退出循环),然后把位置r+1到i-1元素整体向后移动,移动结束后把temp放在r+1的位置。
#include<iostream> using namespace std; int main() { int a[]={2,1,3,5,3,11,5,7,9,12}; int t,r; //插入排序 for(int i=1;i<10;i++) { bool change=false;//用来标识是否 t=a[i]; for(int j=i-1;j>=0;j--) { if(t<a[j]) { change=true; r=j; } else break; } if(change) { for(int k=i-1;k>=r;k--) a[k+1]=a[k]; a[r]=t; } } for(int i=0;i<10;i++) cout<<a[i]<<" "; }
算法思想2:
从第二个元素开始选取,记作temp(位置为i),拿temp和其前面的元素比较,如果temp小,则前面元素后移,直到找到第一个大于小于temp的元素,把temp插入到其面。
#include<iostream> using namespace std; int main() { int a[]={2,1,3,5,3,11,5,7,9,12}; int t,r; //插入排序 for(int i=1;i<10;i++) { t=a[i]; int j=i-1; while(j>=0 && t<a[j]) { a[j+1]=a[j]; j--; } a[j+1]=t; } for(int i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl; }

浙公网安备 33010602011771号