【C语言基础一百题9】66-70题排序和查找方式

    技术2024-10-25  61

    接下来介绍几种排序和查找方式,掌握冒泡,选择,和快排

    -----------------------------------------------------------------------------

    【程序66】 题目:对10个数进行排序 1.程序分析:可以利用冒泡, 2.程序源代码:

    #include

    void main()

    {

    int i,j,temp;

    int a[]={3,2,8,6,4,9,0,1,5,7};

    for(i=0;i<10;i++)

    {

    for(j=0;j<10-i;j++)

    if(a[j]>a[j+1])

    {

    temp=a[j];

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

    a[j+1]=temp;

    }

    }

    for(i=0;i<10;i++)

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

    printf("/n");

    } -----------------------------------------------------------------------------

    【程序67】 题目:对10个数进行排序 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。

    2.程序源代码: #include

    void main()

    {

    int i,j,temp,min;

    int a[]={3,2,8,6,4,9,0,1,5,7};

    for(i=0;i<9;i++)

    {

    min=i;

    for(j=i+1;j<10;j++)

    if(a[min]>a[j])min=j;

    temp=a[i];

    a[i]=a[min];

    a[min]=temp;

    }

    for(i=0;i<10;i++)

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

    printf("/n");

    }

    -----------------------------------------------------------------------------

    【程序68】 题目:对10个数进行排序 1.程序分析:快速排序 2.程序源代码: #include

    void Qsort(int p[],int beg,int end)

    {

    int i=beg,j=end;//和j用来确定还需要判断排序的范围上下标

    int m=i; /*记录基准点*/

    int temp;

    if(beg

    {

    while(i

    {

    for(;j>m;j--) /*对基准数右边扫描*/

    {

    if(p[j]

    {

    temp=p[j];

    p[j]=p[m]; /*进行交换*/

    p[m]=temp;

    m=j;break;/*确定交换后的基准数,跳出循环*/

    }

    }

    i++; /*往右推*/

    for(;i

    {

    if(p[i]>p[m])/*如果左边有比基准数大的*/

    {

    temp=p[i];

    p[i]=p[m];

    p[m]=temp;

    m=i;break; /*交换后的基准点*/

    }

    }

    j--;/*往左推*/

    }/*执行完后,比基准点小的都在左边,比基准点大的都在右边了*/

    Qsort(p,beg,m-1);; /*对左边比基准点小的再次进行排序*/

    Qsort(p,m+1,end); /*对右边比基准点大的再次执行上面的排序方法*/

    } /*直到只剩下要排序一个数为止,此时整个数组已经排序好了*/

    }

    int main()

    {

    int i,a[]={3,2,8,6,4,9,0,1,5,7};

    Qsort(a,0,9);

    for(i=0;i<10;i++)printf(" %d ",a[i]);

    putchar('/n');

    return 0;

    }

    -----------------------------------------------------------------------------

    【程序69】 题目:对10个数进行排序 1.程序分析:快速排序(调用库函数) 2.程序源代码:

    #include

    #include int cmp(const void *a, const void *b)

    {

    return(*(int *)a-*(int *)b);/*这里的(int *)a定义了一个指向int型的指针,注意int *两边的括号不能少,然后(int *)a前面加上*就表示取其指向的值。这里返回的是*(int *)a-*(int *)b,两个数相减的顺序跟函数形参顺序一样这样就会将数组按升序排序,反之如果是return(*(int *)b-*(int *)a),就会将数组按降序排列*/

    }

    void main()

    {

    int i,a[]={3,2,8,6,4,9,0,1,5,7};

    qsort(a,10,sizeof(a[0]),cmp);

    for(i=0;i<10;i++)

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

    putchar('/n');

    }

    -----------------------------------------------------------------------------

    【程序70】 题目:折半查找

    1.程序分析: 2.程序源代码:

    #include

    #include

    int cmp(const void *a,const void *b)

    {

    return(*(int*)a-*(int*)b);

    }

    void main()

    {

    int i,x,start,end,a[]={3,2,8,6,4,9,0,1,5,7,12,14,16,17,19};

    qsort(a,10,sizeof(a[0]),cmp);

    x=12;

    for(start=0,end=14;start<=end;)

    {

    i=start+(end-start)/2;

    if(x==a[i])

    {

    printf("%d/n",i+1);

    return ;

    }

    else if(x

    else start=i+1;

    }

    }

    最新回复(0)