Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >1177: 按要求排序(指针专题)

1177: 按要求排序(指针专题)

作者头像
怠惰的未禾
发布于 2023-04-27 12:57:04
发布于 2023-04-27 12:57:04
58100
代码可运行
举报
文章被收录于专栏:Linux之越战越勇Linux之越战越勇
运行总次数:0
代码可运行

输入n和n个整数,然后按要求排序,若输入1,请输出升序排序序列;若输入2,请输出降序排序序列,若输入3,请输出按绝对值升序排序序列。要求程序结构如下,请完善程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void sort(int a[], int n, int (*cmp)());
 int CmpAsc(int x, int y); /*按升序要求判断两元素是否逆序*/
 int CmpDec(int x, int y); /*按降序要求判断两元素是否逆序*/
 int CmpAbsAsc(int x, int y);  /*按绝对值升序要求判断两元素是否逆序*/
 int main(void)
 {
    int a[10],i,n; 
    int slt;
 
  /*读入n和n个整数,存入数组a*/
 
    /*读入用户的选择,存入slt; */

     switch(slt)
    {
      case 1:   sort(a, n, CmpAsc); break;
      case 2:   sort(a, n, CmpDec); break;
      case 3:   sort(a, n, CmpAbsAsc);break;
    }
   /*输出排序后的数组*/

    }
void sort(int a[], int n, int (*cmp)())
 {
  /*对数组a排序,排序原则由cmp指定,若cmp为真,表示两元素逆序*/
 }
int CmpAsc(int x, int y)
 {
  //如果x>y返回1,否则返回0;
 
 }
int CmpDec(int x, int y)
 {
  //如果x<y返回1,否则返回0;
  }
 
 int CmpAbsAsc(int x, int y)
 {
//如果abs(x)>abs(y)返回1,否则返回0
 }

输入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入第一行是一个正整数n;
输入第二行是n个整数;
输入第三行是一个1~3的整数slt,表示用户的排序要求。

输出

输出n个整数。若用户的排序选择是1,则输出升序排序后的n个整数;若用户的排序选择是2,则输出降序排序后的n个整数;若用户的排序选择是3,则输出按绝对值升序排序后的n个整数;输出占一行,数据之间用空格隔开。

样例输入 Copy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5
2 -3 1 5 4
2

样例输出 Copy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5 4 2 1 -3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <math.h> 

void sort(int a[], int n, int (*cmp)(int x,int y));
int CmpAsc(int x, int y); /*按升序要求判断两元素是否逆序*/
int CmpDec(int x, int y); /*按降序要求判断两元素是否逆序*/
int CmpAbsAsc(int x, int y);  /*按绝	对值升序要求判断两元素是否逆序*/
int main(void){
    int a[10],i,n; 
    int slt;
   
  /*读入n和n个整数,存入数组a*/
   scanf("%d",&n);
   for(i=0; i<n; i++){
   	scanf("%d",&a[i]);
   }
    /*读入用户的选择,存入slt; */
	scanf("%d",&slt);

     switch(slt){
      case 1: sort(a, n, CmpAsc); break;
      case 2: sort(a, n, CmpDec); break;
      case 3: sort(a, n, CmpAbsAsc);break;
    }

   /*输出排序后的数组*/
	for(i=0; i<n; i++){
		printf("%d",a[i]);
		if(i!=n-1)
			printf(" ");	
	}
	
	return 0;
    }

void sort(int a[], int n, int (*cmp)(int x,int y)){ 
  /*对数组a排序,排序原则由cmp指定,若cmp为真,表示两元素逆序*/
	int i,j,t;
	for(i=0; i<n-1; i++){
		for(j=i+1; j<n; j++){
			if((*cmp)(a[i],a[j])){
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
	}
 }

int CmpAsc(int x, int y){
  //如果x>y返回1,否则返回0;
	if(x>y)
  		return 1;
	else
		return 0; 
 
 }

int CmpDec(int x, int y){
  //如果x<y返回1,否则返回0;
	if(x<y)
		return 1;
	else
		return 0;
 }
  
int CmpAbsAsc(int x, int y){
//如果abs(x)>abs(y)返回1,否则返回0
	if(abs(x)>abs(y))
		return 1;
	if(abs(x)==abs(y)&&x>y)//绝对值相等时要求升序排列,负数应在左边 
		return 1;
	return 0;
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
指针详解(冒泡排序、qsort、回调函数、转移表)(三)
冒泡排序的核心思想就是:两两相邻的元素进行比较先写一个基本框架再实现函数定义部分 ,先外层循环确定趟数,再内层循环确定每趟交换的对数,最后判断相邻元素大小,如果不满足顺序就交换
走在努力路上的自己
2024/01/26
1360
指针详解(冒泡排序、qsort、回调函数、转移表)(三)
C语言---深入指针(4)
对于qsort函数来说,我们只需要额外构建一个比较函数就能利用qsort进行快速排列
凯子坚持C
2024/09/23
890
今天发疯,写一下学校的数组作业
如果是对10个数字进行冒泡排序,那么需要进行9轮比较,每轮比较需要进行9+8+...+1次比较
用户11039545
2024/03/28
820
今天发疯,写一下学校的数组作业
初识C语言·指针(4)
如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数 时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的⼀方调用的,用于对该事件或条件进行响应。
_lazy
2024/10/16
600
初识C语言·指针(4)
我熬夜肝完周赛,为你整理出这份题解
本场比赛涵盖很多知识点,具体为 dfs,构造,双指针,set,单调队列,排列距离,逆序数
ACM算法日常
2021/05/11
4280
C语言进阶-回调函数
目录 前言 回调函数 回调型计算器 回调冒泡排序(模拟qsort库函数) qsort函数原型 compar参数 代码演示  冒泡排序(bubble_sort) ---- 前言 ---- 本文主要讲解 回调函数的理解 回调实现计算器 qsort各种功能的使用 冒泡排序各种功能的实现 回调函数 ---- 定义 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针(地址)作为参数传递给另一 个函数, 当这个指针被用来调用其所指向的函数时,我们就说这是回调函数 回调函数不是由该函数的实现
用户9645905
2022/11/30
9520
C语言进阶-回调函数
C语言进阶——指针
str3和str4指向的是一个同一个常量字符串。C/C++会把常量字符串存储到单独的一个内存区域, 当几个指针,指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4值相同,地址不同
小李很执着
2024/06/15
1260
C语言进阶——指针
【C语言】手把手带你拿捏指针(4)(含qsort函数详解)
什么是回调函数?    回调函数就是⼀个通过函数指针调用的函数。    如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发⽣时由另外的一方调用的,用于对该事件或条件进行响应    可能这么说着有些抽象,我们还是举一个例子,比如上一篇文章我们讲到的计算器,我们当时为了解决代码冗余,使用了转移表,也就是函数指针数组,那么是否还有其它方法呢?比如我坚持使用Switch语句,而不使用if语句    这个内容就涉及到我们的回调函数,回调函数简单地说就是将函数指针传给另一个函数,通过这个函数来使用传过来的函数    我们可以将之前冗余的部分包装成函数,最大的冗余就是那个Switch语句,我们来看看冗余部分:
TANGLONG
2024/10/15
930
【C语言】手把手带你拿捏指针(4)(含qsort函数详解)
[C语言]指针进阶(Pointer to the advanced)
本质:const char * pstr = "hello world";本质是把字符串hello world,首字符的地址放到了pstr中.
IT编程爱好者
2023/04/12
4910
[C语言]指针进阶(Pointer to the advanced)
【C语言】指针进阶知识终章
其实这看起来是难以理解的,所以我们可以用typedf(起别名)来简化一下,更加容易认识代码:
平凡的人1
2022/11/15
4990
【C语言】指针进阶知识终章
C语言指针超详解——最终篇一
回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。
fhvyxyci
2024/09/24
950
C语言指针超详解——最终篇一
八大排序-上次看到这么好的排序博客还是在上次
本文将用说人话+动图的形式带你搞懂常见排序算法,简要分析复杂度、稳定性等指标,并给出参考代码。最后安利sort()函数的使用。
唔仄lo咚锵
2021/12/30
6270
八大排序-上次看到这么好的排序博客还是在上次
C语言重点突破(2)指针(三)
首先可以明确的是,函数指针和数组指针的类型都是指针类型,用来存放地址的,数组指针存放数组的地址,而函数指针存放的便是函数的地址。
对编程一片赤诚的小吴
2024/01/23
940
C语言重点突破(2)指针(三)
深度刨析程序中的指针
本质就是把常量字符串hello world的首元素的地址放到了str当中,也就是将常量字符串的首元素h的地址放到str中 练习
Yui_
2024/10/16
710
深度刨析程序中的指针
【C指针进阶】(C精髓)——对指针的更进一步深入剖析(图文近2w详解)
本文承接了上文:初阶指针——全面了解指针,在此基础上对指针进行更深一步的剖析,相信我,也请相信你自己!
诺诺的包包
2023/02/17
5820
【C指针进阶】(C精髓)——对指针的更进一步深入剖析(图文近2w详解)
C语言(指针)8
qsort 是C语言中的一个库函数,使用 qsort 库函数需要包含头文件 <stdlib.h>。这个函数是用来对任意数据类型的数据排序的。
_小羊_
2024/10/16
840
C语言(指针)8
拿捏指针(三)
在这之前我们学习了《拿捏指针(一)》,《拿捏指针(二)》没看过的可以去看看哟,接下里我们将指针最后一篇,《拿捏指针(三)》,看完直接捏爆指针。
秋邱
2024/10/09
790
拿捏指针(三)
基本排序算法总结
以下排序算法模版都会用Comparable接口数据类型,只要实现了Comarable接口的数据类型比如Integer、Double、String和其他许多高级数据类型(如File和URL),这些数据类型的数组可以作为参数调用排序方法。
砖业洋__
2023/05/06
2400
各种选择+冒泡+插入排序图解
由于排序题中大部分都只需要得到排序的最终结果,而不需要写排序的完整过程(例如冒泡排序,快速排序等过程)因此比赛时强烈建议使用C语言中的库函数qsort或是C++中的sort函数,接下来主讲更简洁的sort函数 1.如何使用sort排序
编程范 源代码公司
2019/07/31
5130
各种选择+冒泡+插入排序图解
学习——理解指针(3)
通过之前的学习,我们了解了指针,int*是整型指针,指向的是整型;那么,指向字符型的指针就是字符指针,即char*
星辰与你
2024/10/17
630
学习——理解指针(3)
相关推荐
指针详解(冒泡排序、qsort、回调函数、转移表)(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验