您的位置:

这是c语言求二分插入排序的程序,c语言两种排序方法

本文目录一览:

C语言怎么用二分查找插入排序

进行二分查找的前提是数组已排序,这里假定数组递增排序。

每次查找都将待查找数num与处于数组中间位置a[mid]的数进行比较,num a[mid]则在mid之前的元素中进行查找,反之在mid之后的元素中进行查找。

在函数中使用low, mid, high来对待查找的范围来进行标记。

参考代码如下:

/*整数查找*/

void binsearch( int num, int a[], int length )        /*num为待查找数字,length为数组a的长度*/

{

    int low, mid, high;

    low = 0;

    high = length - 1;

    while( low = high )

    {

        mid = ( low + high ) / 2;

        if( a[mid]  num )

            high = mid - 1;

        else if( a[mid]  num )

            low = mid + 1;

        else

            return mid;

    }

    return -1        /*未查找到num返回-1*/

}

C语言二分法插入已排序的数组中

#includestdlib.h

void sort(int a[],int n){ /*排序函数,要使用二分法查找就必须对数组进行排序*/

int i,k;

for(i=0;in;i++){

int min=i;

for(k=i+1;kn;k++)

if(a[min]a[k])min=k;

if(i!=min){

a[min]+=a[i];/*这里是运用加减法交换两个数*/

a[i]=a[min]-a[i];

a[min]-=a[i];

}

}

}int find(int a[],int n,int key){/*二分法查找;参数:数组名,数组长度,查找关键字*/

int min=0,max=n-1;/*二分法查找头尾变量*/

while(minmax){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/

int cen = (min+max)/2;

if(a[cen]==key) return cen;/*如果查到,则返回关键字在排序数组的下标*/

if(cen==min || cen==max)break;/*如果中间变量等于头尾任一个变量,同样查找失败*/ if(a[cen]key) max=cen;

else min=cen; }

return -1;

}

void main(){/*主程序只是为了证明两个函数的可行性,可以自己编写*/

int a[]={14,10,25,36,87,95,10,12,13,8},i;

sort(a,10);

i=find(a,10,11);

if(i!=-1)

printf("be found");

else

printf("no found");

getch();

}

这是C语言求二分插入排序的程序,有问题,求教,急急急!!!

#include stdio.h

int main()

{

    int a[11]; //a[0]作为哨兵,从a[1]到a[10]是真正数据

    int low,mid,high;

    int x;

    int i,j,n;

    n=10;

    for(i=1; i=n; i++)

    {

        a[i]=0;

    }

    i=1;

    printf("\n要插入的数是 (还有%d个):",n+1-i);

    scanf("%d",x);

    a[i]=x;

    printf("x=%d\n",x);

    printf("排列后 ");

    for(j=1; j=n; j++)

    {

        printf(" %d",a[j]);

    }

    printf("\n");

    for(i=2;  i=n; i++)

    {

        printf("\n要插入的数是 (还有%d个):",n+1-i);

        scanf("%d",x);

        a[i]=x;

        a[0]=a[i]; //a[0]作为哨兵

        low=1;

        high=i-1;

        while(low=high)

        {

            mid=(low+high)/2;

            if(a[mid]  a[0])

            {

                high=mid-1;

            }

            else

            {

                low=mid+1;

            }

        }

        //通过上述的折半查找,得出high值

        //数据往后移动

        for(j=i-1 ; j=high+1 ; j--)

        {

            a[j+1]=a[j];

        }

        //a[0]就是x,将x插入正确的位置

        a[high+1]=a[0];

        printf("\nx=%d\n",x);

        printf("排列后 ");

        for(j=1; j=n; j++)

        {

            printf(" %d",a[j]);

        }

        printf("\n");

    }

    printf("\n我是答案;");

    for(i=1; i=n; i++)

    {

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

    }

    return 0;

}