用选择排序法 从大到小输出10个整数

用选择排序法 从大到小输出10个整数

  • int main() {
    int a[10], *p = a;

    注意:如果不设置数组值设置指针变量就会出错,如*a,而不指定数组的大小 ,这是因为指针变量arr没有确定的值,谈不上指向那个变量,所以指针变量指向数组元素地址的时候,要定义该数组的大小。

  • 选择排序法
    是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。如图:
    在这里插入图片描述
    参考:知乎《C语言十大排序算法,让老师对你刮目相看的技巧》https://zhuanlan.zhihu.com/p/102420855?utm_source=qq&utm_medium=social&utm_oi=1180124150809792512

代码:

#include <stdio.h>
void sort(int arr[], int n);    //函数声明
int main() {
    int a[10], *p = a;   //注意:如果不设置数组值设置指针变量就会出错,如*a,而不指定数组的大小
//    这是因为指针变量arr没有确定的值,谈不上指向那个变量
    printf("请随机输入十个数");
    for (int i = 0; i < 10; i++) {
        scanf("%d", p++);
    }
    p = a;  //p重新指向a的首地址
    sort(a,10);
    for (p = a; p < a + 10; p++) {
        printf("%d", *p);
    }
    return 0;
}

void sort(int arr[], int n) { //形参是数组名
    int temp;
    for (int i = 0; i < n - 1; i++) {   //n-1去除了j还剩下n-1
        for (int j = i + 1; j < n; j++) {
            if (arr[j] > arr[i]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

被调函数有两种写法:
方法1:形参是数组名

void sort(int arr[], int n) { //形参是数组名
    int temp;
    for (int i = 0; i < n - 1; i++) {   //n-1去除了j还剩下n-1
        for (int j = i + 1; j < n; j++) {
            if (arr[j] > arr[i]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

方法2:形参是指针变量

void sort(int *arr,int n){  //形参是指针变量*arr
    int t;
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (*(arr+j)>*(arr + i)) {	//如果第j个元素比第i个元素大,就交换位置
                t =*(arr+i);
                *(arr+i) = *(arr+j);
                *(arr+j) = t;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微莱羽墨

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值