描述
有n个无序的整数。 请按照从大到小的顺序排列。
要求:本题用直接插入排序法完成。
输入
一共输入两行。 第一行是整数n
(0 n 100000 )指示存在n个整数。
第二行是int表示形式范围内的n个整数,每个整数之间有空格分隔。
Output
直接插入每行并逐行输出排序结果。
样品输入
5
8 4 1 5 7
样品输出
8 4 1 5 7
8 4 1 5 7
8 5 4 1 7
8 7 5 4 1
直接排序:将序列分为有序序列和无序序列,按顺序从无序序列中提取元素并将其插入有序序列的相应位置。 初始是有序序列中只有第一个数,剩下的n-1个数构成无序序列。
解法源代码:
#包含
int a[100001];
int main () )
{
输入
n,I,j,t;
scanf('%d ',n );
for(I=0; I
scanf('%d ',a[i] );
for(I=1; I
{
t=a[i]; //将要插入的数量临时放置在变量t中
for(j=I-1; j=0a[j]; j----//按秩序序列(下标0 ) I-1 )查找出入位置
{
a[j 1]=a[j]; //如果找不到插入点,请将位置移动到当前元素的后面,以提供插入元素的空间
}
a[j 1]=t; //找到插入位置,完成插入
for(j=0; Jj
printf('%d ',a[j] );
printf(%d(n ),a[n-1];
}
返回0;
}
将序列分为有序序列和无有序序列,
按顺序从无序序列中检索元素值,并将其插入已排序序列中的适当位置。
初期
有序序列中只有第一个数,剩下的
n-1
当个数构成无序排列时
n
个数需要列入
n-1
二次插入。 在有序序列中插入位
您可以从序列的最后一个数字开始向前移动,以便在找不到插入点之前同时向后移动元素,为插入元素提供空间。
将序列分为有序序列和无有序序列,
按顺序从无序序列中检索元素值,并将其插入已排序序列中的适当位置。
初期
有序序列中只有第一个数,剩下的
n-1
当个数构成无序排列时
n
个数需要列入
n-1
二次插入。 在有序序列中插入位
您可以从序列的最后一个数字开始向前移动,以便在找不到插入点之前同时向后移动元素,为插入元素提供空间。
将序列分为有序序列和无有序序列,
按顺序从无序序列中检索元素值,并将其插入已排序序列中的适当位置。
初期
有序序列中只有第一个数,剩下的
n-1
当个数构成无序排列时
n
个数需要列入
n-1
插入排序的关键是找到可以插入的位置。 就像我们按照身高的顺序从左到右从高到低排列一样。 以第二个同学为标准,把人分为左有序,右无序。 左起,比较第一个同学和第二个同学,如果第一个同学比第二个同学高,则继续以第三个同学为基准进行同样的比较。 如果第一个同学比第二个同学高,则第二个同学插入在第一个同学之前。
例如,8 4 1 5 7
第一次:以4为准。 8与4比较,结果:8 4 1 5
7
第二次:以1为准。 4与1进行比较,8与1进行比较的结果:8(4)1) 5
7
第二次:以5为准。 1和5的比较、4和5的比较、8和5的比较、结果:8 5 4
1 7
第四次:以上
以7为基准。 比较5和7,比较1和7,比较4和7,比较8和7,得到: 87541