#include <stdio.h>
#include<conio.h>
/*----------
*INSERT_SORT
*
* args
* A[] int[],the number of A arrary
* len int ,A length
*
------------*/
void insert_sort(int A[],int len){
int i,j,key
//printf("A length %d\n",len) //output arrary length
for(j=1j<lenj++){
key=A[j]
i=j-1
while (i>-1&&A[i]>key) { //i from 0 to 5,so i>-1
A[i+1]=A[i]
i=i-1
A[i+1]=key
}
}
//output A arrary
for(i=0i<leni++)
printf("%d ",A[i])
}
int main()
{
int A[10]
int i=0
char c
while(1){
scanf("%d",&A[i])//input unmbers
c=getchar()
if(c=='\n')
break
i++
}
//printf("%d %d %d %d %d %d %d %d\n",A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7])
//use insert_sort
insert_sort(A,i+1)//A length is i+1
return 0
}
/*---test------------
* input 5 2 4 6 1 3
*
* output 1 2 3 4 5 6
* ------------------*/
以上程序使用的是Qt Creator 工具,用C语言实现,经调试已经通过。
但依然有个问题:在main()函数中调用insert_sort(int A[])时,若单传数组参数A[],再在insert_sort(int A[])函数里面调用len=sizeof(A)/sizeof(int)计算数组实际输入长度,但是得不到实际输入的数组长度,所以只能采用实参的方式将具体数字通过len传到insert_sort(int A[],int len );在insert_sort(int A[])接收到A数组后直接计算A[]实际输入长度,有什么办法可以实现?
从有序数列和无序数列{a2,a3,…,an}开始进行排序;处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,ai-2,…,a1进行比较,找出合适的位置将ai插入;重复第二步,共进行n-i次插入处理,数列全部有序。
注意事项:
折半插入排序是对直接插入排序的一种改良方式,在直接插入排序中,每次向已排序序列中插入元素时,都要去寻找插入元素的合适位置,但是这个过程是从已排序序列的最后开始逐一去比较大小的,这其实很是浪费,因为每比较一次紧接着就是元素的移动。
C语言插入排序由小到大的代码如下:
int main()
{
int a[10]
int i,j,temp=0
int k,x=0
printf("输入10个数:\n")
for(i=0i<10i++)scanf("%d",&a[i])
for(i=0i<9i++)
{
k = i
for(j=i+1j<10j++)
if(a[j]<a[i])
k = j
temp=a[i]
a[i]=a[k]
a[k]=temp
}
printf("排序后:\n")
for(i=0i<10i++)
printf("%d ",a[i])
getchar()getchar()
}
扩展资料:
数学函数
所在函数库为math.h、stdio.h、string.h、float.h
int abs(int i) 返回整型参数i的绝对值
double cabs(struct complex znum) 返回复数znum的绝对值
double fabs(double x) 返回双精度参数x的绝对值
long labs(long n) 返回长整型参数n的绝对值
double exp(double x) 返回指数函数ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中
double ldexp(double value,int exp)返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回x^y的值
double pow10(int p) 返回10^p的值
double sqrt(double x) 返回+√x的值
参考资料来源:百度百科-C语言函数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)