C++排序算法之插入排序

来源:互联网 发布:by什么意思网络用语 编辑:程序博客网 时间:2024/05/29 04:41

插入算法:把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

代码如下(从小到大):

#include<cstdio>#include<cstdlib>int main(){int n,num[10000];   //定义数组scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&num[i]); //输入数/* 对num[1…n]按递增顺序进行排序,x是监控哨 */int x;for(int i=1;i<n;i++) //依次插入num[2],…,num[n]{x=num[i];int j=i-1;while(x<num[j]) //查找插入位置{num[j+1]=num[j]; //将大于num[i]的元素后移j--;}num[j+1]=x; //插入num[i]}for(int i=0;i<n;i++)printf("%d ",num[i]);}


也可以直接在插入的过程中读入数据,更省时:

#include<cstdio>#include<cstdlib>int main(){int n,num[10000];   //定义数组scanf("%d%d",&n,&num[0]);/* 对num[1…n]按递增顺序进行排序,x是监控哨 */int x;for(int i=1;i<n;i++) //依次插入num[2],…,num[n]{scanf("%d",&num[i]);x=num[i];int j=i-1;while(x<num[j]) //查找插入位置{num[j+1]=num[j]; //将大于num[i]的元素后移j--;}num[j+1]=x; //插入num[i]}for(int i=0;i<n;i++)printf("%d ",num[i]);}

微笑