直接插入排序的基本思想是:
10年积累的网站设计、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有府谷免费网站建设让你可以放心的选择与我们合作。
当插入第i
(i≥
1)
个对象时,前面的V[0],
V[1],
…,
v[i-1]已经排好序。这时,用v[i]的关键码与v[i-1],
v[i-2],
…的关键码顺序进行比较,找到插入位置即将v[i]插入,原来位置上的对象向后顺移。
用c实现的插入排序法,先输入10个数,然后利用插入排序法进行排序,将结果输出。
#include
"stdio.h"
#include
"conio.h"
main()
{
int
a[10],r[11];
int
*p;
int
i,j;
for(i=0;i10;i++)
{
p=a[i];
printf("please
scan
the
NO:
%d\n",i);
scanf("%d",p);
r[i+1]=a[i];
}
r[0]=1;
for(i=2;i=10;i++)
{
r[0]=r[i];
j=i-1;
while(r[j]r[0])
{
r[j+1]=r[j];
j--;
}
r[j+1]=r[0];
}
for(i=1;i=10;i++)
{p=r[i];printf("form
min
to
max
the
NO:
%d
value=%d\n",i,*p);}
getch();
}
起泡排序:需反复比较相邻两个数的比较与交换这两种基本操作。对相邻的两个数进行比较时,如果反面的数大于(或小于)前面的数,将这两个数进行交换,大的数(小的数)往前冒。
void
Sort(a,n)
/*排序*/
{
float
a[];
int
n;
{
int
i;
int
flag;
float
t;
do{
flag=0;
for(i=0;i=n-2;i++)
if(a[i+1]a[i])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
flag=1;
}
}while(flag);
}
这个很简单啊。基本的思路就是先查找到插入或者删除的数字所在数组的位置,如果是插入,就把之后的依次想后挪动一个,然后插入;如果是删除,把之后的依次想前移动一个就行了,不过别忘了处理最后一个数字就行了。要是还有问题,我帮你写个算了。
这段程序是从前往后进行排序的。该程序r[1]--r[10]存储10个数,r[0]用来做标记。首先对于单独的r[1]是有序的。所以我们从r[2]开始和r[1]比较。这是为什么第一个for循环for(i=2;i11;i++);从i=2开始的原因。进入第一个for循环(是排序的那个,不是输入的那个)之后首先把r[i]元素保存在r[0]中,然后让该元素和其前面的元素相比较这一步反映在第二个for循环中for(;r[j]r[0];j--),在这里体现出了r[0]的标号作用,我们并不关心j是否会小于0,因为当j==0是r[j]r[0]已经不再成立。循环体内时比r[0]大的元素依次后移,推出了循环,这样当第二个for循环退出时就是因为r[j]r[0]不再成立,即找到了一个元素r[j]小于等于r[0];j之后的都比r[0]大。这时r[0]就应该在j+1的位置,即r[j+1]=r[0];这样经过一个内层的for循环就把原来i位置的元素按顺序插入到其前面有序的元素当中去了,当i==10全部排序完成。如原数组的元素为r[]={3,2,1,8,5},当i==2时的依次内循环后变为r[]={2,3,1,8,5};i==3时,我们要拿1和全面的元素比较,得到r[]={1,2,3,8,5}.依次类推,最后排序完成。
先将要插入的数放在已排好顺序的数组的最后一个,然后与前一个数进行比较,如果这个数比前一个小则交换,否则结束