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[]实际输入长度,有什么办法可以实现?

#include<stdio.h>

int main()

{int t,n,i,j,x,a[200]

 scanf("%d",&t)

 for(i=0i<ti++)

 {scanf("%d%d",&n,&x)

  for(j=1j<=nj++)

    scanf("%d",&a[j])

  a[0]=x

  j=n

  while(a[j]>x)

  {a[j+1]=a[j]

   j--

  }

  a[j+1]=x

  for(i=1i<=ni++)

    printf("%d ",a[i])

  printf("%d\n",a[i])

 }

 return 0

}


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

原文地址:https://54852.com/yw/7832814.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存