C语言编程插入法排序

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。下面是我自己编的,运行出错了,觉得问题出在中间循环那里。... 定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。

下面是我自己编的,运行出错了,觉得问题出在中间循环那里。但是又不知道怎么改。。求解答。谢谢!!
#include <stdio.h>
void main()
{
int i,j,n;
int a[11],b;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
scanf("%d",&n);
for(i=0;i<11;i++)
if(n<a[i])
{
b=a[i];
a[i]=n;
for(j=i;j<11;j++)
a[j+1]=b;
a[j+2]=a[j+3];
}
for(i=0;i<11;i++)
printf(" %d",a[i]);
printf("\n");
}
展开
 我来答
书中橙子
2014-02-09 · TA获得超过117个赞
知道小有建树答主
回答量:124
采纳率:100%
帮助的人:67.1万
展开全部
算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
重复步骤2~5
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。
范例程式码
void insertion_sort(int array[], int first, int last)
{
int i,j;
int temp;
for (i = first+1; i<=last;i++)
{
temp = array[i];
j=i-1;

while((j>=first) && (array[j] > temp))
{
array[j+1] = array[j];
 j--;
}
array[j+1] = temp;
}
}
a525970280
2013-04-11 · TA获得超过1163个赞
知道小有建树答主
回答量:698
采纳率:40%
帮助的人:423万
展开全部
for(i=0;i<10;i++)
{
if(n<a[i]) /*找到满足条件的点*/
{
for(j=9;j>=i;j--)
{
a[j+1]=a[j]; /*让后面的元素后移*/
}
a[i]=n; /*再将n插入*/
break; /*要用break结束*/
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chr1999
2013-04-11 · TA获得超过1056个赞
知道小有建树答主
回答量:2462
采纳率:0%
帮助的人:1243万
展开全部
for(i=0;i<11;i++)
{
if(n<a[i])
{
for(j= 10; j>i;--)
a[j]=a[j-1];
a[i] = n;
break;
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f3b3e02
2013-04-11 · TA获得超过2156个赞
知道小有建树答主
回答量:821
采纳率:90%
帮助的人:584万
展开全部
#include "stdio.h"
void Sort(int arr[])
{
int i,t,j,temp;
for(i=1;i<10;i++)
{
t = arr[i];
j = i;
while((j>0) && (arr[j-1]>t))
{
arr[j]=arr[j-1];
--j;
}
arr[j]=t;
}
}
int main()
{
int arr[]={2,4,6,8,9,0,1,3,5,7};
int i;
Sort(arr);
for(i=0;i<10;i++)
printf("%d ",arr[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
貌似風輕
推荐于2017-12-15 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:696万
展开全部
for(j=i;j<11;j++)
a[j+1]=b;
你这步会把 a[i]后面的数全变为 b
#include <stdio.h>
void main(){
int i,j,n;
int a[11],b;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
scanf("%d",&n);
if(n>=a[9]) //因为下面的if(n<a[i]) 漏掉了这个情况,就是n最大的情况
a[10]=n;
for(i=0;i<11;i++)
if(n<a[i])
{
b=a[i];
a[i]=n; //把n放进去
break; //遇到第一个n<a[i],就停止
}
for(j=10;j>i+1;j--)
a[j]=a[j-1]; //a[10]原来是空的,a[9]的值直接放入a[10],然后a[8]放a[9]……到a[i]为止
a[i+1]=b;

for(i=0;i<11;i++)
printf(" %d",a[i]);
printf("\n");
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式