使用函数指针完成数组的排序

使用函数指针完成数组的排序,第1张

#include <stdio.h>

#include <stdlib.h>

void sort(int [], const int, int (*)(int, int))

void swap(int*, int*)

int ascending(int, int)

int descending(int, int)

int main()

{

int i,n,*p

printf("input n:")

scanf("%d",&n)

p=(int*)malloc(n*sizeof(int))

if(!p){printf("malloc err")exit(0)}

printf("input %d number:\n",n)

for(i=0i<ni++)scanf("%d",p+i)

printf("1:ascending\n2:descending\n")

scanf("%d",&i)

if(i==1)sort(p,n,ascending)

if(i==2)sort(p,n,descending)

for(i=0i<困铅ni++)printf("%d ",p[i])

return 0

}

void sort(int items[], const int count, int (*cmp)(int, int))

//没看清,之悔尺拦碧胡前是冒泡,不是选择

{

int a,b,c,exchange,t

for(a=0a<count-1++a)

{

exchange=0

c=a

t=items[a]

for(b=a+1b<count++b)

{

if(cmp(t,items[b]))

{

c=b

t=items[c]

exchange=1

}

}

if(exchange)swap(&items[c],&items[a])

}

}

void swap(int *a,int *b)

{

int t=*a

*a=*b

*b=t

}

int ascending(int a, int b)

{

if(a>b)return 1

return 0

}

int descending(int a, int b)

{

if(a<b)return 1

return 0

}

#include<stdio.h>

void sx(int *,int)//升序

void jx(int *,int)//降序

void printfNums(int *,int)//打印数组

int main()

{

    int nums[]={10,15,14,16,9},n=5,*p//n:数组个数

    p=nums

    printf("升序排列:\n")

    sx(p,n)

    printfNums(p,n)

    printf("降序排列:\n")

    jx(p,n)

    printfNums(p,n)

    return 判笑0

}

void printfNums(int * p,int n)//打印数组

{

    int i

    printf("\n")

    物烂for(i=0i<ni++)

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

    printf("\n")

}

void sx(int * p,int n)//升序

{

    int i,j,num

    for(j=0j<=n-1j++)

    {

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

        {

            if(p[j]>p[i])

            {

                num=p[j]

                p[j]=p[i]

                p[i]=num

            }

        }

    }

}

void jx(int * p,int n)//降序

{

    int i,j,num

    for(j=0j<=n-1j++)

    {

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

        {

            if(p[j]<p[i])

            {

            罩冲漏    num=p[j]

                p[j]=p[i]

                p[i]=num

            }

        }

    }

}

以下C++程序在VC6.0下调试通过:

#include "iostream.h"

/* 对数组startIndex位置起,长度为length的元素进晌告岁行降序排列 */

void sort(int arr[], int startIndex, int length)

{

int i, j, k

int temp

for(i=0i<length-1i++)

{

k = i

for(j=i+1j<lengthj++)

if(arr[j+startIndex] >arr[k+startIndex])

k = j

if(k != i)

{

temp = arr[k+startIndex]

arr[k+startIndex] = arr[i+startIndex]

arr[i+startIndex] = temp

}

}

}

void main()

{

int arr[] = {2,4,6,8,10,12,14,16,18,20}

int size = 10

int startIndex = 3, length = 5

int i

cout<<友虚"before sort : "<<endl

for(i=0i<sizei++)

cout<<arr[i]<<" "宴睁

cout<<endl

sort(arr, startIndex, length)

cout<<"after sort : "<<endl

for(i=0i<sizei++)

cout<<arr[i]<<" "

cout<<endl

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存