C语言实现插入排序

C语言实现插入排序,第1张

        通过C语言实现插入排序算法:对于少量排序的元素,插入排序是一个有效的算法,其 *** 作过程类似于手中的扑克牌,从第二个元素从左往右循环检查比较,满足A[i]<A[i-1],则交换A[i]与A[i-1]的值。往复循环直到最后一个元素比较完成。具体程序如下:

#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语言函数


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11172231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存