c语言插入法
① c语言编写程序,用插入法将10个数进行从大到小排序
#include<stdio.h>
void main()
{
int a[11],n,i,j;
printf("Please Input 10 Numbers: ");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
for(i=2;i<=10;i++)
{
a[0]=a[i];
for(j=i-1;a[j]>a[0];j--)
a[j+1]=a[j];
a[j+1]=a[0];
}
for(i=1;i<=10;i++)
printf("%d ",a[i]);
printf(" ");
}
② c语言插入法排序的算法步骤
算法描述
一般来说,插入排序都采用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;
}
}
③ 利用随机函数产生100个1000以内的整数,存放在数组中。c语言的插入法
利用函数在产生的过程中是不能够进行整数的,因为它们的c语言插入法比较高。
④ c语言数据结构单链表(头插入法)
head=(LNode
*)malloc(sizeof(LNode));
这一句不要,没啥用处,除非你head指向的节点也就是第一个节点的data不需要数据
head->next=NULL;这里修改为head=NULL;
让head先指向NULL,也就是没有节点
其实这个可以不要,再主函数中,先让链表是空链表即可(即让head=NULL)
head->data=data;
head->next=p->next;
head->next=p;
关键在这里
你仔细考虑一下,一般来说头插法的head只是一个指针,不要对head指向的那个节点操作,对p操作完成后,让head指过去即可
所以修改为
p->data=data;
//赋值过去,因为你现在申请了p的内存空间
p->next=head;
//把head指向的那个节点连接到p的后面,这样完成头插
//
这是head没有用了,p成为链表的头指针
head=p;
//head再指向这个链表的头部,也就是p指向的节点,为下一次循环做准备
head=Createlist(head);//链表初始化
主函数中这样不太好,建议不要重名
⑤ 怎样用C语言程序实现插入法排序与起泡法算法排序
直接插入排序的基本思想是:
当插入第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;i<10;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);
}