题目及要求如下图所示:
代码如下:
#includevoid bubble_sort(int arr[],int n){//冒泡排序发法 int i,j,temp; for(i=0;i arr[j]){ temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } void show(int arr[],int n){//输出函数,不输出数组中值为0的 项 int i; printf("%d",arr[0]);//输出第一个数 for(i=1;i 1){ if(num%2==0){ num=num/2; } else{ num=(num*3+1)/2; } sign[num]=1; } } for(i=0;i 1. eg:当输入的n为3时,while循环中计算了3,5,8,4,2,1,sign[5],sign[8],sign[4],sign[2]都被标记为1。当我们在输入 nums[i]的值为5,8,4,2时,这些值已经被sign数组标记,直接把0赋给他,且不输出。这样就只输出了关键数字。
2. 数组sign用来记录被标记的数 ,数字定义大一点,定义小了,例如sign[100]题目不给过。
3.冒泡排序法可以用C语言函数库中qsort()方法。
#include//使用qsort()需要引入的头文件 void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) ); 函数功能:对指向的数据进行排序,数组中有num个元素,每个元素的大小为size。
buf:指向数组的起始地址,通常传入数组名即可
num:数组的元素个数
size:数组中每个元素的大小(字节数)
(*compare)(const void *, const void *) 指向比较函数的函数指针,指定排序规则。
函数返回值:void4.注意题目输出要求,第一个输出前和最后一个输出后没有空格。



